Google chrome extension 使用port.onDisconnect确定何时卸载/禁用Chrome扩展

Google chrome extension 使用port.onDisconnect确定何时卸载/禁用Chrome扩展,google-chrome-extension,Google Chrome Extension,我知道Chrome扩展API没有一个正式的方式来确定用户何时卸载你的扩展(这是一个遗憾) 在连接到后台页面后,我正在使用我的内容脚本页面中的port.onDisconnect侦听器来确定用户何时卸载/禁用我的扩展。根据docs,port.onDisconnect应该仅在扩展不再存在时(或者在后台页面显式调用port.disconnect时)触发,这应该涵盖禁用/卸载场景 这实际上在我的机器上工作得很好。每当我卸载或禁用扩展时,port.onDisconnect都会按预期启动(每个打开的选项卡一次

我知道Chrome扩展API没有一个正式的方式来确定用户何时卸载你的扩展(这是一个遗憾)

在连接到后台页面后,我正在使用我的内容脚本页面中的port.onDisconnect侦听器来确定用户何时卸载/禁用我的扩展。根据docs,port.onDisconnect应该仅在扩展不再存在时(或者在后台页面显式调用port.disconnect时)触发,这应该涵盖禁用/卸载场景

这实际上在我的机器上工作得很好。每当我卸载或禁用扩展时,port.onDisconnect都会按预期启动(每个打开的选项卡一次)。问题是,我看到许多实际用户触发了此事件。我99%确信没有那么多用户禁用/卸载我的扩展(我看到他们稍后会用我的扩展执行其他任务,我的扩展安装号没有显示这么多卸载)

这使我相信,除了禁用/卸载扩展之外,还有其他一些情况会触发port.onDisconnect。我根本无法在我的机器上复制这个。在我的计算机上,只有当我禁用/卸载扩展时,才会触发port.onDisconnect,并且我不会在任何地方从后台页面显式调用port.disconnect

所以我的问题是:除了用户禁用/卸载扩展之外,触发port.onDisconnect的条件是什么?我原以为扩展的版本升级可能会导致这种行为,但我在我的机器上测试了它,我认为不是这样的


有什么想法吗?

如果您的内容脚本在每次注入时都添加了一个侦听器,那么运行该脚本的每个打开页面/选项卡的侦听器都将被执行

单个用户可以卸载/禁用您的扩展,但可能打开了10个受影响的页面/选项卡,因此可能有10个用户这样做


我不确定最好的解决方法是什么,如果有的话,因为您试图实现的目标实际上不受支持。

我可以确认您正在将侦听器添加到返回的对象,而不是。这是正确的。以下是我的内容脚本中的代码:
code
$(document).ready(函数(){port=chrome.extension.connect();端口(){onDisconnect.addListener(函数(){//user disable/uninstall});})
code
无法移植。选项卡关闭时会调用onDisconnect?Alasdair,对不起,可能我不清楚这一点。是的,我知道当用户卸载我的扩展时,他有10个选项卡打开端口。onDisconnect将触发10次。我已经在我的服务器端对此进行了说明。我的问题并不是我从一个用户处多次触发此事件(这是意料之中的)。问题是此事件因太多用户而被触发。我真的不认为有这么多人正在禁用/卸载我的扩展,但我不知道除了禁用/卸载之外,还有什么原因会导致这么多用户触发此事件。