在应用程序中收听chrome扩展程序安装

问题描述 投票:3回答:2

如何从网上商店安装Chrome扩展程序时收听/跟踪?我以前有一个内联安装的扩展,但内联安装很快就会结束,我希望用户操作打开网上商店来安装扩展,并在他们为UI更改添加扩展时监听,并根据它进行操作。

我尝试了在here中找到的消息传递方法,但似乎无法正常工作。

manifest.json看起来像:

   "background": {
     "scripts":["index.js"],
     "persistent": false
   },
   "permissions": ["desktopCapture"],
   "externally_connectable": {
        "matches": [
            "*://localhost:*/*",
         "https://*.stageten.tv/*"
        ]
    }

和index.js:

chrome.runtime.onMessageExternal.addListener(
  function(request, sender, sendResponse) {
      if (request === screenShareExtensionId) {
          if (request.message) {
              if (request.message == "version") {
                  sendResponse({version: 1.0})
                  alert('Hiiii')
              }
          }
      }
      return true;
  })

在我的应用内:

chrome.runtime.sendMessage(screenShareExtensionId, { message: "version" },
    function (reply) {
        if (reply) {
            if (reply.version) {
              return true;
            }
        }
        else {
          return false;
        }
    })

并且基于我的redux逻辑中的值,UI是否更改/等待扩展安装。

javascript reactjs google-chrome-extension react-redux
2个回答
1
投票

你可以在你的background page开始时这样做。

您需要将标志(例如,它可以是扩展的版本)保存到localStorage

之后,在后台页面的每次启动时,您需要检查此标志是否在您的存储中。如果没有标志 - 那么你需要跟踪安装,否则,它只是通常重新加载后台页面。

同样的方法可以用来跟踪商店扩展的更新,只需要比较版本。


0
投票

this self-answered question解决了这个问题,由于没有接受/投票,我无法将其标记为副本。


这是我如何从background script解决它(没有使用content script):

background.js

  • 听听onInstalled事件。
  • 查询与您要通知的URL匹配的所有已打开选项卡。
  • 在每个选项卡中执行一个小脚本,以便qazxsw poi通知安装成功。
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.jsonexternally_connectable都声明了您要通知的网站的网址格式。

permissions

网页

只需听听扩展成功安装时触发的"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() } }
© www.soinside.com 2019 - 2024. All rights reserved.