【发布时间】:2014-02-15 11:00:34
【问题描述】:
我想运行一个内容脚本来识别链接到某处的第一个图像并将链接返回到后台脚本。但是我不能在他们之间传递任何消息,我也不知道为什么。大部分代码都是注释,我试图通过告诉它将第一个标题更改为“测试”来简单地测试内容脚本是否正在执行(因为没有消息我唯一能做的就是更改页面的 HTML 和 CSS) .代码如下: 编辑:完整更新的代码
后台脚本:
chrome.browserAction.onClicked.addListener(function () {
chrome.tabs.query({active:true, currentWindow:true}, function(tabs)
{
chrome.tabs.executeScript(tabs[0].id, {file:"content.js"}, function ()
{
console.log("sending first time");
console.log(tabs[0].id);
chrome.tabs.sendMessage(tabs[0].id,{test: "test"}, function (response)
{
if (undefined == response)
{
console.log ("first one didn't work");
chrome.tabs.sendMessage(tabs[0].id, {test: "test"}, function (response)
{
console.log(response.test);
});
}
});
});
});
});
内容脚本:
chrome.runtime.onMessage.addListener( function (msg, sender, sendResponse)
{
/*var test1 = document.getElementsByTagName("h1")[0];
test1.innerHTML="test";*/
sendReponse({test: "123"});
/*var parentList =document.getElementsByTagName("a");
var link = "";
var child;
for (var i=2; i<parentList.length;i++)
{
child=parentList[i].firstChild;
if ("IMG"==child.nodeName)
{
link=parentList[i].href;
break;
}
}
teste1.innerHTML=link;
var answer = new Object();
Answer.link = link;
teste1.innerHTML=answer.link;
sendResponse({messager:answer});*/
});
【问题讨论】:
-
问题可能与 dom 操作有关,而不是消息。为什么不尝试从 contentscript 执行 sendResponse 回调,并在后台脚本中 console.log 响应。
-
另外,你检查过标签错误控制台吗?我相信 contentscript 中的错误或 console.logs 会出现在那里。
-
致 levi:即使我放了一个像警报这样的简单语句,如果它在 chrome.tabs.query 内部,它也不会执行。另外,我无法写入控制台。这是我打开另一个问题的另一个问题。
-
更新情况:感谢 levi 在我关于控制台的其他问题中的帖子,我可以在后台脚本中看到语法错误。现在后台脚本上任何地方的命令都可以正常执行。只有内容脚本有问题。
-
根据文档 -
The argument should be any JSON-ifiable object。尝试发送一个对象
标签: javascript google-chrome-extension content-script message-passing