有没有办法通过JavaScript来检测是否已安装Safari扩展程序? https://extensions.apple.com有一些方法可以执行此操作,因为如果已安装扩展,它们会将安装链接更新为“已安装”。但是,我无法弄清楚他们是如何做到的。我已经将它追溯到'SafariExtensionGalleryController'类型的对象,但这就是我得到的。
Apple是否为扩展系统添加了特殊的挂钩?
忘记...
Thx,Joel
答案 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的问题:如果您的用户卸载了扩展程序,您只会在会话结束时关闭(关闭浏览器)。