问题标签 [safari-app-extension]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
858 浏览

safari - 如何以编程方式启用 Safari 应用程序扩展?

我正在 macOS 应用程序中开发 Safari 应用程序扩展。当用户安装此应用程序时,该扩展程序会添加到 Safari,但默认情况下是禁用的。我们可以通过SFSafariExtensionManager类的 getStateOfSafariExtension 方法来检测扩展的状态。

现在我想以编程方式启用扩展状态,如果它被禁用。我怎样才能做到这一点?或者有谁知道偏好/应用程序扩展设置存储在 macOS 中的什么位置?

0 投票
1 回答
622 浏览

swift - safari 应用程序扩展:从 swift 后台进程向所有选项卡广播消息

在旧版扩展中,可以迭代safari.application.activeBrowserWindow.tabs以将消息发送到使用扩展注册的所有选项卡。

新的 Safari 应用程序扩展是否有任何等效功能?

我一直在阅读文档,但没有找到任何关于如何实现这个非常基本的东西的提示。

一个可怕的解决方法是让所有选项卡都 ping Swift 背景,但实际上这是一个如此基本的事情,它不可用或被文档覆盖似乎很荒谬,我错过了什么吗?

我还尝试保留“messageReceived”处理程序看到的所有“页面”实例的弱映射,希望SFSafariPage引用将一直保留到选项卡关闭但它们几乎立即丢失,这表明它们比实际的消息通道更多Safari 页面。

0 投票
1 回答
707 浏览

iframe - 如何使用 Safari App Extensions 将 iframe 正确注入 DOM?

我正在使用 Safari App Extension 将我的 WebExtension 移植到 Safari。

我的扩展是 DOM 中的 iframe 注入,所以我想将类似这个注入脚本的东西加载为SFSafariContentScript.

问题是DOMContentLoaded当我的 iframe 被注入时,事件似乎再次被触发,从而导致无限循环。

这种行为似乎与您对具有两个文件的简单注入脚本所期望的不同,index.html并且index.js按预期工作。

如果我在我的 Safari 应用程序扩展中替换addEventListenersetTimeout秒钟,我的扩展被正确注入并且运行良好,但选择任意时间注入 iframe 对我来说感觉很脏。

如何使用 Safari App Extensions 将 iframe 正确注入 DOM?

0 投票
0 回答
140 浏览

swift - 无法在 safari 应用程序扩展中覆盖 safari 的默认搜索?

我正在使用 swift 语言在 Xcode 中开发 safari 应用程序扩展,以接管对我网站的默认搜索。

我已更新info.plist文件以在每个页面中注入 script.js 文件,使用SFSafariContentScript.

我尝试在 script.js 文件中使用以下代码将事件添加到默认搜索框,但它不起作用(它在旧版 Safari 扩展中工作)。

Safari 应用扩展是否支持向搜索栏添加事件?对此的任何帮助表示赞赏。

提前致谢!

0 投票
1 回答
262 浏览

safari-app-extension - 是否可以从项目文件夹中为 Safari App Extension 导入内容脚本?

我正在开发一个 Safari 应用程序扩展。但是我的内容脚本不在 Xcode 项目文件夹中。是否可以导入这些脚本文件?

我在Apple的官方文档中看到:

对于每个脚本文件,将字典添加到数组中。每个字典都必须有一个 Script 键,其值指定要包含的脚本文件的路径(相对于包的 Resources 目录)。

假设我的扩展项目名为 SafariExt。我的应用程序的文件夹结构:

SafariExt并且Scripts在同一个基本文件夹中。

现在我../../Scripts/myScript.js在 Info.plist 中使用来引用myScript.js文件,但是在 Safari 中这个文件没有被加载。

Info.plist 如下所示:

0 投票
2 回答
869 浏览

xcode - 如何在没有 macOS 应用程序的情况下开发 Safari 应用程序扩展?

我刚刚开发了一个全新的 Safari 应用扩展。我没有任何 mac os 应用程序可以通过 mac 应用程序商店分享,只有我的扩展程序是我的产品。

看来(从那个 Apple 页面)我必须创建一个虚拟的 mac os 应用程序来通过 mac 应用程序商店共享我的扩展程序。我对吗 ?

谢谢 !

0 投票
3 回答
915 浏览

xcode - Safari 应用程序扩展未出现在 Safari 偏好设置中时如何进行故障排除?

我正在开发一个 Safari 应用程序扩展。以前它工作得很好。当我在 Xcode 中运行项目并在 Safari 中启用Allow Unsigned Extensions时,我可以在Safari Preferences -> Extensions页面中看到我的扩展。

在我与我的一位团队成员合并代码后,突然无法安装扩展。

我努力了:

  • 清理 Xcode 中的 build 文件夹,然后再次运行。但没有运气。
  • 重新启动 Xcode 也无济于事。
  • 使用命令pluginkit -mAvvv -p com.apple.Safari.extension检查已安装的 Safari 扩展列表。我的分机不在列表中。

Xcode 输出中有一些错误,但我无法将它们与我面临的问题联系起来:

现在我的选择已经不多了。它在 Apple Developer 网站中缺少官方文档。

是否有解决此类问题的常规步骤?是否有任何类型的系统日志可以帮助我解决错误?任何建议表示赞赏。

0 投票
1 回答
979 浏览

swift - 如何在 Safari 应用程序扩展中单击工具栏上的应用程序窗口?

当用户单击 safari 中的工具栏项时,我想打开一个应用程序/扩展程序窗口。这不是关于扩展Popover功能的问题。主要原因是关闭/隐藏停用和用户操作的窗口(这两个条件都需要工作)。

Safari 应用程序扩展(意味着 Apple 为 safari 创建扩展的新首选/强制方式)可以在单击工具栏项时打开弹出窗口或调用命令。但它不能以编程方式隐藏(https://forums.developer.apple.com/thread/105817)。根据 bweinstein 的回答,苹果开发人员正在进行中。

我的用例是关于包含加载网页的 WKWebView 的窗口。当用户单击其中的任何内容时,我想在 Safari 的新选项卡中打开一个页面(这部分已经在 Popover 模式下对我有用)并立即关闭窗口(这对我还不起作用)

所以我的想法是避免集成 Popover 功能。我想在override func toolbarItemClicked(in window: SFSafariWindow) {}调用 Command ( ) 时显示 Window 。

我知道这在某种程度上是可行的,例如,agilebits 的 1Password 扩展正是这样做的:当您单击工具栏项时,显示的窗口没有关闭/最小化按钮,没有菜单等。它完全按照我的需要工作,但我没有知道如何实现这一目标。

我不知道是将视图定义为 Safari 扩展的一部分还是包含应用程序的 Storyboard 的一部分,以及如何以编程方式访问它并在用户单击工具栏项时将其显示在屏幕上。

由于我是 macOS 开发的新手,因此我并没有真正可以分享的代码。我 POV 的重要部分:-Info.plistNSExtension->SFSafariToolbarItem->Action设置为Command

如上所述,我需要实现的功能是在用户单击工具栏项时以编程方式打开和关闭窗口。

提前致谢

0 投票
1 回答
573 浏览

macos - 检测是否安装并启用了 Safari 应用程序扩展

我有一个 Safari 应用程序扩展。如果扩展已在 Safari 中成功安装并启用,有没有办法从包含的应用程序中检测?文档还有很多不足之处……</p>

0 投票
1 回答
314 浏览

safari - 在 Safari 应用程序扩展中捕获网页的屏幕截图

我正在将旧版 Safari 扩展程序转换为 Safari 应用程序扩展程序,这是一个链接

我的旧版扩展使用 safari.application.activeBrowserWindow.activeTab.visibleContentsAsDataURL 函数来捕获活动选项卡的屏幕截图,我如何使用 Safari 应用扩展来做到这一点?请帮忙。