检测是否安装了Safari扩展

时间:2011-08-12 21:30:59

标签: javascript safari

有没有办法通过JavaScript来检测是否已安装Safari扩展程序? https://extensions.apple.com有一些方法可以执行此操作,因为如果已安装扩展,它们会将安装链接更新为“已安装”。但是,我无法弄清楚他们是如何做到的。我已经将它追溯到'SafariExtensionGalleryController'类型的对象,但这就是我得到的。

Apple是否为扩展系统添加了特殊的挂钩?

忘记...

Thx,Joel

2 个答案:

答案 0 :(得分:1)

如果您是扩展程序的作者,则可以检测是否已安装自己的扩展程序。我只是将一个不可见的字符串注入我的网站,然后我在页面加载时进行扫描。如果已经注入了字符串,则必须安装我的扩展名,然后您可以根据结果执行任何操作。

<强> 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代码中返回的扩展名更改Extensions网站。

希望这有帮助!

答案 1 :(得分:0)

要检测您的扩展服务器端,最简单的方法是使用内容脚本在您的域中注入会话cookie。

在Chrome和Firefox中,您可以注入HTTP标头,但Safari中的API不允许它。

Cookie的问题:如果您的用户卸载了扩展程序,您只会在会话结束时关闭(关闭浏览器)。