检测何时安装Chrome扩展程序,而不进行内联安装

时间:2018-09-15 17:35:19

标签: javascript google-chrome-extension chrome-web-store

通过Chrome Web Store而不是嵌入式安装完成安装后,如何打开标签页通知您已安装Chrome扩展程序?

上下文

自2018年6月及以后的Chrome has deprecated inline installation以来,以下机制用于通知是否已安装扩展程序从现在起不起作用

chrome.webstore.install(url, successCallback, failureCallback)

从现在开始,扩展 必须仅通过Web Store安装。

我们已经建立了一个屏幕共享扩展程序,它可以提示用户共享他的屏幕。

当我们的用户点击“共享屏幕”时,我们打算将他们重定向到网上商店中的Chrome扩展程序,并在他们安装扩展程序后立即重新触发共享屏幕功能。

1 个答案:

答案 0 :(得分:0)

这是我从background script(不使用content script)中解决问题的方法:

background.js

  • 收听onInstalled事件。
  • 查询所有与您要通知的URL匹配的打开的标签。
  • 在每个标签中执行一个小的脚本,postMessage会通知 安装成功。
 
chrome.runtime.onInstalled.addListener(function listener(details) {
  if (details.reason === chrome.runtime.OnInstalledReason.INSTALL) {
    chrome.tabs.query({
      url: [
        'https://localhost:3000/*',
        'https://staging.foo.com/*',
        'https://production.foo.com/*'
      ]
    }, tabs => {
      Array.from(tabs).forEach(tab => {
        chrome.tabs.executeScript(tab.id, {
          code: `window.postMessage('screenshare-ext-installed', window.origin);`
        });
      });
    });

    chrome.runtime.onInstalled.removeListener(listener);
  }
});

manifest.json

只需确保同时声明externally_connectablepermissions 您要通知的网站的网址格式。

"externally_connectable": {
    "matches": [
    "https://localhost:3000/*",
    "https://staging.foo.com/*",
    "https://production.foo.com/*"
  ]
},
"permissions": [
  "desktopCapture",
  "https://localhost:3000/*",
  "https://staging.foo.com/*",
  "https://production.foo.com/*"
],

网页

只需在某处收听由...触发的postMessage消息 成功安装的扩展名。

window.onmessage = e => {
  if (e.data === 'screenshare-ext-installed') {
    // extension successfully installed
    startScreenShare()
  }
}

信用