javascript - Firefox WebExtension : How Do I Run Code Prior to Disable/Uninstall?

标签 javascript firefox firefox-addon firefox-addon-webextensions

我最近将我的一个 GreaseMonkey 脚本转换为 WebExtension,只是为了对这个过程有一个第一印象。现在我已经达到了在禁用/卸载所述扩展程序时进行一些清理或简单地撤消所有更改会很好的地步。

从我在 Mozilla 的页面上看到的,runtime.onSuspend 应该可以解决问题。不幸的是,它看起来还没有实现(我在常规的 Firefox 发布 channel 上)。

换句话说,我想要做的是在用户删除/禁用我的扩展程序后运行代码,以便我可以清理监听器等,并且通常将选项卡恢复到它们的状态,即。 e.,撤消扩展所做的所有更改。

最佳答案

您最初的措辞对于您想要什么有些不清楚。因此,此答案还包含有关在某些情况下您可以接收卸载通知的一种方式的信息。

在卸载/禁用之前在 WebExtension 附加组件中运行代码:
不,即使支持, runtime.onSuspend 事件也不会执行您想要的操作。它用于通知事件页面它们即将被卸载。当它们正在监听的事件的处理完成时,甚至页面也会定期卸载。这并不表示正在卸载扩展。

“确定”您的“WebExtension 被禁用/卸载”:
如果您的问题确实是您在问题的最后一行中陈述的内容:“...有没有办法确定 WebExtension 是否已被禁用/卸载?”然后,看起来您可以使用 runtime.setUninstallURL() ,它是从 Firefox 47 开始实现的。这将允许您设置一个 URL,以便在卸载附加组件时访问。这可用于在您的服务器上记录加载项已卸载。它不会通知您的 WebExtension 它已被卸载,也不会在发生这种情况时允许您在 WebExtension 中运行代码。

不幸的是,您不能在您的 WebExtension 中检测到此 URL 已被访问以表明您的 WebExtension 正在被卸载/禁用。经测试,该网址是在WebExtension完全卸载后访问的。此外,WebExtension 被禁用时也不会访问,也不会在禁用后卸载时访问。只有在启用附加组件的情况下卸载 WebExtension 时才会访问它。由于这是一个仅在启用扩展时运行的 JavaScript 调用这一事实,人们会期望页面仅在离开启用状态时才会打开。

通过将以下行添加到 WebExtension 并查看页面何时打开来完成测试:

chrome.runtime.setUninstallURL("http://www.google.com");

考虑到它的实际运行方式(仅在启用并直接卸载 WebExtension 时才访问),使用它作为“一种确定 WebExtension 是否被禁用/卸载的方法”只会部分有效。应该清楚的是,如果加载项在卸载之前被禁用,则访问此 URL 不会通知您。

关于javascript - Firefox WebExtension : How Do I Run Code Prior to Disable/Uninstall?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38645274/

相关文章:

css - Firefox 中的 div 圆 Angular 不起作用

javascript - Firefox 上的 event.target

html - 为某些密码输入字段禁用 Firefox 密码管理器

firefox - XUL:点击自定义状态栏,如何隔离左右

javascript - 单击我的按钮重新加载另一个句子

javascript - 在 ASP.NET 中按下 Enter 时触发 OnClientClick

javascript - 在 InDesign javascript 中使用变量更改文本

ionic-framework - ionic2:浏览器中的地理位置失败并出现错误:异常:未捕获( promise ):false

ruby - 如何访问我在 Selenium Webdriver 中添加的 Firefox 扩展?

javascript - 如何使按钮消失并在 'x' 秒后重新出现?