如何检测其他Chrome扩展程序何时覆盖同一页面

St.*_*son 5 google-chrome-extension

例如,如果我的扩展程序覆盖newtab页面,并且用户安装另一个也覆盖newtab页面的扩展程序.目前,只有一个newtab扩展显示,它通常不是我的.

我该怎么做才能检测到何时发生这种冲突并通知用户?

管理API并没有告诉我,如果扩展覆盖任何网页,让我遗憾的是不能使用的.

aps*_*ers 4

这似乎不是 API 的现有功能。我建议您在http://crbug.com上打开一个错误。

如果做不到这一点,您可以执行以下令人讨厌的黑客攻击(我尚未测试过):

  1. 让您的新标签页在加载时向您的后台页面发送消息。

  2. 监听chrome.webNavigation.onBeforeNavigate涉及以下内容的事件chrome://newtab

    chrome.webNavigation.onBeforeNavigate.addListener(function(details) {
        /* send message */
    }, { url: [{ urlEquals: 'chrome://newtab/' }] });
    
    Run Code Online (Sandbox Code Playgroud)
  3. webNavigation看到浏览器加载chrome://newtab但不久之后您没有看到后台页面的消息时,您的新标签页可能没有被使用。从那里,您可以发送通知,或打开另一个带有通知的选项卡/窗口。

不幸的是,这需要webNavigation许可,如果您的扩展不需要它,那就很不幸了。它带有的警告(“此扩展可以访问您的选项卡和浏览活动”)可能会吓跑一些潜在用户,特别是如果用户没有明显的原因。(话又说回来,也许我对用户的安全意识过于乐观了。)如果您的扩展当前使用该tabsAPI,那么它无论如何都已经带有此通知。

  • [`chrome.webNavigation`](https://developer.chrome.com/extensions/webNavigation.html) API 比 `tabs` API 更合适。该 API 允许声明过滤器,例如 `chrome.webNavigation.onBeforeNavigate.addListener(function(details) { /* do some */ }, { url: [{ urlEquals: 'chrome://newtab/' }] }) ;` (2认同)