问题标签 [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.
google-chrome-extension - WebExtension API:打开/关闭 DOM 替换
我刚刚开始使用 WebExtension API(在 Safari 而不是 Chrome 上),并且我已经让扩展在弹出 ui 中显示一个按钮并单击它时 content.js 脚本将替换任何给定的页面上的单词与另一个给定的单词。
这很好用,但我想在弹出用户界面中有另一个按钮,可以轻松地反转这个替换调用。目前我只是让它执行相同的替换功能,但相反,但我想知道是否有一种方法可以反转执行的所有扩展操作,而无需再次定义它们,也无需简单地刷新页面以恢复所有更改。
希望这是有道理的,不胜感激任何人都可以提供的指点!
ios - Safari Web Extension 后台请求 CORS 问题
我正在 iOS 15 上开发 Safari Web 扩展,到目前为止一切似乎都很顺利,除了一件事:来自 background.js 的获取请求总是会失败,因为它是跨源的,因此会引发 CORS 错误。
如果我在服务器中添加“Access-Control-Allow-Origin:*”,则请求完成且没有任何错误。然而,我们不愿意允许所有的起源。
尝试的解决方案
这不起作用,因为每次安装应用程序时 GUID 都会更改。
有什么建议可以解决这个问题吗?非常感谢
xcode - 从 git repo 转换 safari web 扩展不成功
我正在尝试将 chrome web 扩展转换为 safari 扩展。我的环境是带有 XCode 12.5.1 的 Big Sur VM。
当我克隆扩展程序的 git repo ( https://github.com/toobeeh/skribbltypo ) 并尝试使用“xcrun safari-web-extension-converter skribbltypo” (从父文件夹) 转换它时,它只会吐出错误“无法在 file:///... 解析清单”(路径正确指向清单所在的 repo 文件夹)。
网络研究表明,问题可能是文件夹是 zip(我尝试了多种方法将 repo 下载为 zip、解压缩、解压缩签名的 crx ......)或路径不正确(我还拖了文件夹到终端,并且 file:/// 路径是正确的),但没有成功。
这是否与我正在运行的虚拟机有关?我不敢相信我在很多方面都做错了。如果有人可以尝试这个过程,我会很高兴。提前致谢。
ios - 在 Safari Web Extension (iOS 15) 中将消息从应用程序 (popup.js) 发送到 JS (content.js)
我在做一个简单的任务时遇到了麻烦。在 Xcode 13 中,您可以创建一个 Safari Extension App(适用于 iOS 15 的 Safari Web Extension)。
环顾四周,共享扩展有各种 js 资源:background.js、content.js 和 popup.js。
Popup.js 是您启动 Safari Web 扩展时呈现的模式。在 popup.html 中,您可以将元素添加到弹出 DOM(例如文本、按钮等)。在我的弹出窗口中,我有一个在 popup.js 中连接的按钮。当我按下这个按钮时,我想通知 content.js 这个事件。我该怎么做呢?
browser.runtime.sendMessage({ type: "start" });
我当前的代码向包含在 popup.js中的按钮添加了一个事件侦听器。
Xcode 的模板在 content.js 中包含以下内容:
据我所知,JS 在 popup.js 中运行,但我在 console.log 中没有看到 content.js 的任何内容。旁注:console.log 真的很难用于 iPhone Safari 应用程序。
我找到了这个文档,但它只讨论了将消息从 macOS 应用程序传递到 JS。我正在尝试将消息从 iOS 弹出窗口传递到 content.js。
geolocation - 如何从 Safari 网络扩展中获取用户的地理位置
我正在构建一个(2020 年新样式/基于 html 和 javascript)的 Safari Web 扩展。在弹出窗口(MDN 术语中的浏览器操作)中,我想检索用户的当前位置。
关于如何在 Chrome 中执行此操作有一个类似的问题;向清单添加“地理定位”权限对 Safari 不起作用。我看到在 XCode 中我可以授予对应用程序扩展应用程序的位置访问权限,但是目前尚不清楚如何检索它。
(我正在考虑的一种解决方案是让弹出页面向本机应用程序发送消息,获取那里的位置,然后将其发送回弹出窗口;我希望有一个更简单的解决方案)。
更新:最后一个解决方案似乎也不起作用。从扩展中,您只能将消息发送到扩展的 swift 部分,而不是主本机应用程序。无论我尝试什么,扩展的这个 swift 部分也无法访问该位置。
ios - 将嵌套的 div 类添加到 blockerList.json
我目前正在开发一个 Safari 应用程序扩展程序,它会阻止社交媒体页面中的某些元素。例如我想阻止喜欢的数量。在 safari 的 web 控制台中检查时,我看到了 div 元素
我现在的问题是我不确定如何在我的 blockerList.json 中阻止这个元素。这是我的方法,但似乎不起作用:
我的问题是,我必须注入一些 js 还是更好的方法?
感谢您的帮助。
html - Ipad 上的 Safari Web 扩展对 DOM 操作无响应
我有一个 Safari 网络扩展程序,单击按钮后会出现一个下拉菜单。再次单击它会使其消失。这在所有其他 ios 设备和 mac 上按预期工作,但在 ipad 上,最外面的容器(白色部分)保持下降。这种工作方式是在 html 中有一个部分
在其中,“showhide” div 默认设置为“display: none”。单击按钮后,它会设置为“显示:阻止”,这会导致该部分展开并显示信息列表。再次单击后,它将设置为“显示:无”,所有内容都会消失,但最外面的容器仍然很大。它甚至不在我的 html 代码中,所以不知道如何编辑它。 - 见下文
正如您所看到的,html 被突出显示,但它只覆盖了大约一半的可用空白空间,所以我不知道是什么导致最外面的元素保持下降。如果有人知道如何解决这个问题,请告诉我。
ios - 有没有办法检测扩展程序是否在 iPad 和 iPhone 上运行
我正在将扩展从 Chrome/Firefox 移植到 iOS 上的 Safari。当扩展弹出窗口出现时,iOS 上的 Safari 上有两种不同的行为。在 iPhone 上,它从屏幕底部以全屏宽度菜单的形式出现。在 iPad 上,它的行为与 MacOS 上的 Safari 类似,并且弹出窗口从工具栏中的扩展图标下来,并且是动态大小的。
我想在我的 javascript 代码中检测这两种不同的情况。在前一种情况下,我想避免设置弹出窗口的宽度(因为这会导致问题),在后一种情况下,我确实想设置宽度(就像我在 Chrome 等中所做的那样)。
我不确定这是否是检测 iPad 与 iPhone 的情况(但我有兴趣知道如何做到这一点)。可能有一个屏幕尺寸足够大的 iPhone 会导致它使用后一种行为。
javascript - 从 Safari Web 扩展访问前置摄像头深度数据(到用户的距离)
我试图通过 Safari 扩展来确定用户与 iPhone 13 上的前置摄像头之间的距离。是否可以访问扩展内部的深度数据?
ios - iOS Safari Web 扩展请求在网页上使用扩展的权限
我为我的应用程序开发了一个 ios safari 网络扩展程序,在模拟器和我的设备上一切似乎都运行良好。
但是,我注意到在某些情况下,当用户尝试授予 safari 中的扩展程序权限时,系统会显示一条警报,要求对保存在用户钥匙串中的所有站点的权限。这真的很奇怪。我无法始终重现此行为,有时它可以正常工作,并且仅针对用户所在的域请求许可。
当我发现当用户在钥匙串中保存了很多网站密码时,这个问题已经成为一个真正的问题,Safari 在请求许可时冻结并且变得完全无法使用,迫使用户关闭它。
这是我的扩展的清单:
}
这是 safari 请求允许扩展访问用户钥匙串中注册的 653 个不同网站的屏幕截图: 在此处输入图像描述