0

我正在尝试将新标签 URL 从 background.js 发送到 content.js。.sendMessage() 执行但没有到达 content.js

背景.js:

chrome.tabs.onUpdated.addListener(
    function (tabId, changeInfo, tab) {
        if (changeInfo.url) {
            chrome.tabs.sendMessage(tabId, {
                url: changeInfo.url
            })
        }
    }
);

内容.js:

chrome.runtime.onMessage.addListener(function(request, sender, callback) {
    console.log('here');
  });

清单.json:

{
  "manifest_version": 2,

  "name": "Url tracker",
  "description": "Track your latest visited URLs",
  "version": "0.0.1",
  "icons": {
    "16": "logo-small.png",
    "48": "logo-small.png",
    "128": "logo-small.png"
  },
  "permissions": [
    "activeTab",
    "tabs"
  ],
  "background": {
    "scripts":["background.js"],
    "persistent": false
  },
  "content_scripts": [{
    "matches": ["<all_urls>"],
    "all_frames": true,
    "js": ["content.js"]
  }]
}

4

1 回答 1

0
  1. 默认情况下,domContentload的内容脚本(可以更改),但是在内容脚本运行之前,在选项卡开始加载IE时,该URL被报告为ONUPDED。

    解决方案是添加一个检查以跳过第一次更新,因为它不是必需的:内容脚本的一个实例在每个匹配的网页中运行,并且它已经知道location.href它的页面。

    if (changeInfo.url && tab.status === 'complete') {
    
  2. 在 chrome://extensions 页面上重新加载扩展程序(或从网上商店更新)后,其所有内容脚本都会“孤立”并且无法接收消息。

    解决方案是显式地重新注入它们

于 2021-05-09T04:56:13.790 回答