0

我已经阅读了文档,这应该是基本的,但我似乎无法让这些警报出现。怎么了?

popup.html

<html>
<head>
<script>
    function finder() {
        chrome.tabs.getSelected(null, function(tab) {
          chrome.tabs.sendMessage(tab.id, {type: "feature"}, function(response) {
            console.log(response.farewell);
          });
        });
    }
</script>
<style>
    p {
        border: 1px solid black;
        width:200px;
        font-size:10px;
    }
</style>
</head>
<body>
<p><a id="jira">Click to populate FE description</a></p>
<script>
var jira = document.getElementById('jira');
jira.addEventListener('click', finder, false);
</script>
</body>
</html>

内容脚本:

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
    alert('sreceived');
    if (request.type == "feature") {
        alert('score!');
    }
});
4

1 回答 1

5

内联 JavaScript 将不会被执行。此限制禁止内联块和内联事件处理程序(例如<button onclick="...">)。

通过以上几行很明显您的 popup.html 违反了限制,可以通过以下方式解决:

删除所有<script>标签popup.html并将原始代码移动到popup.js.

<html>
<head>
<script src="popup.js"></script> <!-- Added this line -->
<style>
    p {
        border: 1px solid black;
        width:200px;
        font-size:10px;
    }
</style>
</head>
<body>
<p><a id="jira">Click to populate FE description</a></p>
</body>
</html>

我并没有从字面上复制粘贴代码popup.js。这些是我所做的更改:

  1. chrome.tabs.getSelected()不推荐使用chrome.tabs.query(),所以我更新了chrome.tabs.getSelected(null, function(tab) {});
  2. 注释掉,console.log(response.farewell);因为内容脚本没有响应处理程序。

最终 popup.js

function finder() {
    chrome.tabs.query({
        "status": "complete",
        "currentWindow": true,
        "active": true
    }, function (tabs) {
        chrome.tabs.sendMessage(tabs[0].id, {
            type: "feature"
        }, function (response) {
            //console.log(response.farewell);
        });
    });
}
document.addEventListener('DOMContentLoaded',= function() {
    document.getElementById('jira').onclick = finder;
});

manifest.json 的注意事项

  1. 确保权限可用作"permissions":["tabs","<all_urls>"],
  2. 内容脚本的权限也

    "content_scripts": [
        {
          "matches": ["<all_urls>"],
          "js": ["content.js"]
        }
    ]
    

最终清单.json

{
"name":"Basic Message Passing",
"description":"This demonstrates Basic Message Passing",
"browser_action":{
    "default_popup":"popup.html",
    "default_icon":"screen.png"
},
"manifest_version":2,
"version":"2",
"permissions":["tabs","<all_urls>"],
"content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["content.js"]
    }
  ]
}

您的内容脚本很好,所以我没有更改它。

示范

输出:

在此处输入图像描述

在此处输入图像描述

如果您需要更多信息,请与我们联系..

于 2012-12-02T18:34:13.027 回答