在chrome.tabs.executeScript中使用background.js变量

时间:2013-05-11 18:26:24

标签: javascript google-chrome google-chrome-extension

使用chrome.tabs.executeScript,如何在插入的内容脚本中使用background.js中的变量?我的意思是这样的:

(...)
var identificador = target.selectionText;
chrome.tabs.executeScript(null,
                       {code:"alert(identificador);"});
(...)

这只是我需要做的一个发明的例子。在我的扩展中,我的目标是设置一个变量,选择一部分文本(使用上下文菜单),当重新加载Web时,在文档中搜索它,如果找到匹配项,请提醒我。我知道这样做的唯一方法是使用正则表达式和document.body.innerText,但我相信我只能使用document.body.innerText使用executeScript注入JS。那么...有没有更好的方法呢?如果没有,我如何将带有文本部分的变量发送到executeScript执行的代码?

1 个答案:

答案 0 :(得分:3)

将信息从后台页面(background.js)传递到正在查看的网页的最佳方式是使用Content ScriptsMessage Passing的组合。

内容脚本允许您将JS文件添加到网页。这将用于从background.js接收消息并在网页DOM上执行操作。

Message Passing为您提供了一种通过在后台页面和网页之间传递JSON对象进行通信的机制。

添加内容脚本的示例:

{
    "name": "My extension",
    "permissions": [
        "tabs"
    ],
    "content_scripts": [{
        "js": ["myscript.js"]
    }]
}

background.js的示例内容:

// Get the current tab and send a message from it:
chrome.tabs.getSelected(null, function(tab) {
    chrome.tabs.sendMessage(tab.id, {
        identificador: target.selectionText
    });
});

myscript.js的示例内容:

// Listen to the message
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    console.log(request.identificador);      
});

请注意,Google现在建议您使用Event Pages代替Background Pages