11

我是 Chrome 扩展的新手,当然我坚持每一步,但这特别难。也许这是一个愚蠢的错误,但这是我想要做的:

将内容脚本中的简单消息发送到后台页面,并将其作为变量处理。所以我的内容脚本中有这个:

$(document).ready(function() { 
    var d = document.domain;    
       chrome.extension.sendMessage({dom: d});  

 });

在我的后台脚本中:

chrome.extension.onMessage.addListener(function(request) {
    alert(request.dom);
});

因此,警报工作正常。但它“进入”我正在浏览的页面,而不是 HTML 扩展,这意味着,当点击我的扩展按钮时,它不会弹出,而是在页面加载时被编码到内容脚本中。

请,任何帮助将不胜感激。

4

1 回答 1

18

我的Demo扩展如下

文件和角色

a) manifest.json (文档)

b) myscript.js(内容脚本见文档

c) background.js(背景 HTML 文件参见文档

d) popup.html(浏览器操作弹出窗口见文档

e) popup.js(后台页面修改值的接收器)

清单.json

将所有文件注册到具有权限的清单(即背景、弹出窗口、内容脚本)

{
"name":"Communication Demo",
"description":"This demonstrates modes of communication",
"manifest_version":2,
"version":"1",
"permissions":["<all_urls>"],
"background":{
    "scripts":["background.js"]
},
"content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["myscript.js"]
    }
  ],
"browser_action":{
    "default_icon":"screen.png",
    "default_popup":"popup.html"
}  
}

myscript.js

使用sendMessage() API与后台页面通信

var d = document.domain;
chrome.extension.sendMessage({
    dom: d
});

背景.js

使用onMessage()onConnect()监听器为 Content 和 popup.js 添加了事件监听器

var modifiedDom;
chrome.extension.onMessage.addListener(function (request) {
    modifiedDom = request.dom + "Trivial Info Appending";
});
chrome.extension.onConnect.addListener(function (port) {
    port.onMessage.addListener(function (message) {
        if (message == "Request Modified Value") {
            port.postMessage(modifiedDom);
        }
    });
});

popup.html

示例浏览器操作 HTML 页面注册 popup.js 以避免内联脚本

<!doctype html>
<html>

    <head>
        <script src="popup.js"></script>
    </head>

    <body></body>

</html>

popup.js

使用Port\Long Lived Connection与后台页面通信以获取结果

var port = chrome.extension.connect({
    name: "Sample Communication"
});
port.postMessage("Request Modified Value");
port.onMessage.addListener(function (msg) {
    console.log("Modified Value recieved is  " + msg);
});

希望这会有所帮助,如果您需要更多信息,请告诉我

于 2012-12-04T07:20:01.030 回答