问题标签 [safari-web-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 投票
0 回答
183 浏览

safari - 为什么 xcrun 认为 Safari 不支持 manifest.json 键?

我正在将一个非常基本的 WebExtension 转换为 Safari 扩展,并且在运行xcrun命令时收到一个奇怪的警告。

警告:您当前版本的 Safari 不支持 manifest.json 中的以下键。如果这些对您的扩展很重要,您应该检查您的代码以查看是否需要进行更改以支持 Safari:
      manifest_version
      js
      名称
      匹配
      版本

扩展在构建时按预期工作。

为什么命令行工具给我的信息不正确?

0 投票
0 回答
143 浏览

safari - 为什么始终允许时 Safari 会忽略 manifest.json 匹配项

我正在尝试让我的 WebExtension 与 Safari 一起工作。

matches为什么无论我在 manifest.json 中设置什么,所有内容脚本都会被注入每个页面?

澄清一下,只有当我在安装时单击“在每个网站上始终允许”或将“对于其他网站”设置为允许时才会发生这种情况。如果配置如下所示,一切正常:

在此处输入图像描述

0 投票
0 回答
122 浏览

safari - setInterval 在 Safari 网络扩展上无法正常工作

我最近使用 safari 网络扩展转换器将我的 chrome 扩展移植到 safari:https ://developer.apple.com/documentation/safariservices/safari_web_extensions/converting_a_web_extension_for_safari 。

但是,我发现我的 setInterval 调用仅在后台页面中执行了一定次数。当我打开我的网络扩展的背景页面时,我尝试运行一个简单的间隔来查看结果:

Safari Web 扩展背景页面在运行设定次数后间隔卡住

当我为我的 chrome web 扩展尝试同样的事情时,间隔无限期地运行:

间隔连续运行的 Chrome Web 扩展后台页面

如果我在 Safari 中打开任何随机网页的开发控制台后尝试运行间隔,则间隔可以正常工作:

间隔连续运行的 Safari 内容页面

同样,递归 setTimeout 函数在 Web 扩展的后台页面中失败:

我的后台页面中的递归 setTimeout 函数我的后台页面 中递归设置超时函数的结果(之后停止)

我不确定为什么计时器可能会在 Safari 的后台页面中失败。我的扩展在 chrome/brave/firefox 中运行良好。谢谢!

0 投票
0 回答
47 浏览

javascript - Safari Web 扩展 - 无法使用 FileSaver.js 保存文件

Safari 一开始就停止下载(从我的浏览器扩展程序触发),并将文件名显示为“未知”。我发现如果您在Settings中将该网站的Download权限设置为Deny ,任何网站也可能发生这种情况。

基本上,我的扩展没有保存文件的权限。但问题是,Safari 不会询问我是否要继续下载。它只是停止该过程。

如何让 Safari 允许我的扩展程序保存文件?

0 投票
0 回答
52 浏览

google-chrome-extension - documentUrlPatterns 不尊重路径名

在创建上下文菜单项时,我在 Safari 上尝试documentUrlPatterns与我的 Web 扩展一起使用时遇到了一些问题。

例子:

browser.contextMenus.create({id: "12354", title: "Test01",documentUrlPatterns:["https://www.linkedin.com/feed/"]});

documentUrlPatterns任何具有显式pathname(如上所示)的网站上使用时,不会匹配文档 url 创建上下文菜单项。

使用上面的代码,我希望看到一个https://www.linkedin.com/feed/带有 title的上下文菜单项Test01,但什么也没有出现。如前所述,似乎任何明确的路径名,例如/feed//someother/page/任何网站上都存在此问题。

我对匹配工作原理的理解使我认为显式路径名在模式中是有效的,但也许我遗漏了一些东西。

如果我删除最后一个斜杠/,上下文菜单项似乎按预期创建。

documentUrlPatterns我的预期结果是否有效,或者我所缺少的工作方式有什么独特之处?

上面的代码似乎在 Chrome 和 Firefox 中按预期工作。我想这可能是一个与 Apple Safari 相关的错误,但在报告它之前,我很好奇是否有我遗漏的东西。

0 投票
1 回答
207 浏览

google-chrome-extension - 适用于 Chrome、Firefox、Safari 标准参考和工具的 Web 扩展(浏览器插件)(2021 年)

据我所知,我们今天使用的浏览器插件的正确名称实际上称为“Web 扩展”。在每个浏览器都有自己的 API 之前,Chrome 和 Firefox 都同意了,现在是 Safari(2021 年 macOS 11 的 v14)见

但是,我找不到在所有 3 种主要浏览器中都可以使用的确切标准参考和示例。

或许我们可以深入挖掘很多相关链接

但是是否有工具/库可以跟踪兼容性并确保


请确认要使用哪些术语,指出将强制兼容性的规范和工具。

0 投票
0 回答
89 浏览

safari - Safari Web 扩展 - 后台脚本 - sessionStorage 和 localStorage 无法访问

我使用以下方法将扩展从 Chrome 转换为 Safari:

除一件事外,所有工作都有效:当尝试从后台脚本访问 localStorage 或 sessionStorage 时,我得到:

它适用于所有其他浏览器(chrome、firefox、edge)——但不是在这里。我希望解决方案是在 xcode 构建设置中打开一些标志,而不是尝试实现一些本机 swift 代码——我(和许多其他开发人员)不会这样做。

有什么解决办法吗?

0 投票
0 回答
118 浏览

safari - Safari Web Extension icon does not open popup from the overflow (>>) menu

Video showing the bug: https://www.youtube.com/watch?v=tQoOYWe0jfE

  1. Install any Safari Web Extension from the Mac App Store (e.g. DuckDuckGo Privacy Essentials, Bitwarden Password Manager).
  2. Resize the Safari window until the extension browser_action icon is forced into the overflow menu (>> at the far right of the toolbar).
  3. Open the overflow menu and click the menu item for the extension. Nothing happens.

This even occurs when using the sample extension "Sea Creator" developed by Apple. You can build it and try it out by following the instructions on this page: https://developer.apple.com/documentation/safariservices/safari_web_extensions/developing_a_safari_web_extension

I have filed a Feedback Assitant report for this issue: FB9495287 / http://www.openradar.me/radar?id=5035732439662592

Anyone know what's going on here? Or does anyone have a workaround to get the extension popup to appear when invoked from this menu?

0 投票
1 回答
119 浏览

safari - 网页如何向 Safari Web 扩展发送消息?

网页上的 javascript 代码如何触发向 Safari Web 扩展发送消息?

它似乎browser.runtime.connectNative()将允许后台脚本与本机应用程序通信。更具体地说,有状态数据可以通过 runtime.Port 发送。

似乎browser.runtime.connect()还允许内容脚本与后台脚本进行通信,但是一旦存在内容脚本,就会向最终用户发出以下(正确的)警告:

此扩展程序可以读取和更改网页

似乎没有记录的网页将数据发送到后台脚本的机制。这是怎么做到的?

注意:这个问题指的是苹果在 2020 年针对 MacOS 和 2021 年针对 iOS 发布的 Safari Web Extensions。

0 投票
0 回答
107 浏览

javascript - Safari Web 扩展无法发送本机消息

我正在尝试为我的本机应用程序创建一个 Safari Web 扩展。我想要一个带有按钮的弹出窗口,单击该按钮将与我的本机应用程序进行通信:

但是,应用程序无法接收到 Safari Web Extension 发送的消息:

Safari 日志显示此错误消息:

怎么了?