sendMessage从弹出窗口到content.js不能在chrome扩展中工作

时间:2015-04-28 17:55:58

标签: google-chrome-extension popup sendmessage

我正在尝试为Chrome扩展程序创建弹出式界面。我似乎无法从popup.html / popup.js向content.js脚本发送消息。这是我到目前为止所拥有的。当我点击扩展图标时,我会看到一个说clickme的按钮。我点击它没有任何反应,chrome javascript控制台没有错误,也没有发送到content.js的消息。

清单

{
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
  "manifest_version": 2,
  "name": "extensiontest",
  "version": "0.2",
  "content_scripts": [
  {
    "matches": [
      "<all_urls>"
    ],
    "js": ["content.js"]
  }
],
"browser_action": {
  "default_icon": "Beaker.png",
    "default_popup":"popup.html"
},
"background": {
  "scripts": ["background.js"]
},
"permissions": [
    "tabs"
  ]
}

popup.html

<html>
<head></head>
<script src="popup.js"></script>
<body>
<input id="button1" type=button value=clickme>
</body></html>

popup.js

function popup(){
    alert(1);
      chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
    var activeTab = tabs[0];
    chrome.tabs.sendMessage(activeTab.id, {"message": "start"});
  });

button1=document.getElementById("button1");
button1.addEventListener('click', popup)
}

content.js

   chrome.runtime.onMessage.addListener(
      function(request, sender, sendResponse) {
        if( request.message === "start" ) {
         start();
             }
      }
    );

    function start(){
        alert("started");
    }

1 个答案:

答案 0 :(得分:0)

2105 的答案仍然适用于 chrome 版本 88.0.4324.104。我刚刚测试了这个。我要更新的一件事是而不是

警报(“开始”);在 content.js 中使用 console.log("started");

你有你的证明(点击 F12,控制台选项卡)它对你有效,你可以验证 x 次点击产生 x 次“启动”日志条目。

确保每次“加载解压缩”时都重新加载目标页面,这让我卡住了一会儿。

我的 manifest.json 看起来像这样:

{
"name":"Chr Ext",
"description":"blah blah",
"version":"2",
"minimum_chrome_version": "46",
"manifest_version":2,
  "content_scripts": [
  {
    "matches": [
      "<all_urls>"
    ],
    "js": ["content.js"]
  }],
    "permissions": [
        "tabs"
    ],
    "browser_action": {
        "default_popup": "popup.html"
    }
}