javascript - 检测是否安装了 Safari 扩展

标签 javascript safari

有没有办法通过 JavaScript 检测是否已安装 Safari 扩展? https://extensions.apple.com有一些方法可以做到这一点,因为如果扩展已经安装,他们会将安装链接更新为“已安装”。但是,我无法弄清楚他们是如何做到的。我已经将其追溯到“SafariExtensionGalleryController”类型的对象,但据我所知。

Apple 是否只是为了他们的东西而在扩展系统中加入了特殊的 Hook ?

丢失...

谢谢,乔尔

最佳答案

如果您是扩展的作者,那么您可以检测是否安装了您自己的扩展。我只是将一个不可见的字符串注入(inject)我的网站,然后在加载页面时扫描它。如果字符串已被注入(inject),则必须安装我的扩展,然后您可以对结果做任何您喜欢的事情。

identifier.js

if (window.top === window) 
{
    //detect if the extension has been installed and disable "Install" button if that's the case
    if (document.title === "YOUR PAGE TITLE") //we don't want to inject the string into any website, just ours
    {
        var p = document.createElement("noscript");
        var texto = document.createTextNode("Extension Installed");
        p.appendChild(texto);

        document.body.appendChild(p);
    }
}

我怀疑 Apple 使用 Safari 用来显示网站的 WebView 以编程方式执行此操作,然后在内部运行 javascript 脚本,根据 Safari 代码中返回的扩展更改扩展网站。

希望这对您有所帮助!

关于javascript - 检测是否安装了 Safari 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7046524/

相关文章:

javascript - 如何在 npm 包 commandLineArgs 中将字符串输入为 Number

javascript - 在返回方法中访问查询

javascript - 无法创建新的 MeanIO 包。需要依赖 'access'

javascript - Mac 和 IOS Safari 上的奇怪滚动条行为 (css/javascript)

javascript - LI 元素之间有空格的 UL 菜单 - 这怎么行?

javascript - 考虑浏览器连接限制的ajax请求超时

javascript - Hammer.js 在点击叠加层并将其移除时将焦点设置在叠加层下方的输入上

javascript - 无法在 Windows Safari 浏览器中单击输入类型 ="file"

javascript - 防止 Safari 自动滚动到焦点元素(回滚技术在 Safari 12 中停止工作)

ios - 从 ffmpeg 创建的 Mp4 文件可以在模拟器/PC 浏览器上播放,但不能在真实设备中的 iOS 应用程序/safari 上播放