在Safari中获取扩展程序卸载事件

10

有没有一种方法让Safari浏览器扩展程序检测自己是否被卸载?

我想发送一个事件到Google Analytics,以跟踪我的扩展程序的卸载率。


我正在使用localStorage来保持扩展的状态(=“需要卸载”)。问题是,当用户卸载扩展时,这个值不会清除。如果我知道扩展被卸载了,我就可以清除localStorage并返回到干净的状态。 - Maciej Jankowski
2个回答

2
在开发论坛上搜索后,我发现Safari显然没有这样的事件(不像Chrome),如果有的话,它们是未记录的(因此不应该使用)。我认为你最好的选择是:
a)通过{{link1:Apple的错误报告和功能请求网站}}请求该功能。
b)设置一个外部服务,可以监视~/Library/Safari/Extensions或Extensions.plist文件是否被删除(考虑到安全风险,这可能非常困难)。
c)通过每天或其他间隔向外部服务发送ping来跟踪活跃用户群。然后可以通过活动下降来估计删除/不活动率。

有什么想法可以解决我上面评论中提到的用例吗? - Maciej Jankowski
@MaciejJankowski 只有在 Safari 通过重置 Safari 清除它或在您的扩展程序中清除它时,localStorage 才会被清除。由于没有办法检测卸载,因此无法在卸载时清除它。用户可以清除他们的 localStorage,这很奇怪,但这就是当前系统的工作方式。 - mleyfman
1
@MaciejJankowski,你可能还想了解一下AppleScripts,因为一些流行的扩展(如1Password等)利用它们来添加钩子到扩展沙盒之外。 - mleyfman
看起来扩展设置不像在扩展的后台页面中的localStorage那样被保留 - 这就是我正在寻找的答案。 - Maciej Jankowski

0
您可以在全局文件脚本中注册window.onunload事件来检测扩展程序何时被卸载。最好使用addEventListener()并使用"unload",因为Safari可能会使用该事件清除扩展程序存储。还要确保检测事件是否在扩展程序更新或重新加载时触发,因为在这些情况下,全局页面也会被卸载。
window.addEventListener("unload", function() {
  //handle uninstall event
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接