1

我想运行一个内容脚本来识别链接到某处并将链接返回到后台脚本的第一个图像。但是我不能在他们之间传递任何信息,我不知道为什么。大部分代码是评论,我试图简单地测试内容脚本是否正在执行,通过告诉它将第一个标题更改为“测试”(因为我无需消息就可以做的唯一事情就是更改页面的HTML和CSS) 。代码如下: 编辑:全面更新的代码在Chrome扩展中传递来自内容脚本的邮件

背景脚本:

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});*/ 
}); 
+0

它可能是问题与dom操纵有关,而不是消息。为什么不尝试执行contentcript中的sendResponse回调,并在后台脚本console.log中响应。 – levi

+0

另外,你检查了标签错误控制台?我相信内容中的错误或console.logs将显示在那里。 – levi

+0

要levi:即使我把一个简单的语句像alert一样,如果它在chrome.tabs.querry中,它也不会执行。另外,我无法写入控制台。这是我另外打开另一个问题的另一个问题。 –

回答

0

我测试的扩展页面本身的扩展。但似乎你不能注入JavaScript(可能是因为它是一个浏览器的设置页面)。它在其他页面上很好地工作。

相关问题