Javascript Chrome扩展:如何激活非活动选项卡上的内容脚本

Javascript Chrome扩展:如何激活非活动选项卡上的内容脚本,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我正在制作一个烂番茄扩展,如果你输入电影名称,它将显示评论家/观众的得分。现在,我正在尝试让我的背景脚本与内容脚本通信,以操纵打开的电影选项卡的DOM。有一个小问题:content js只能在侦听活动选项卡上的消息集时打印到屏幕上 编辑:为了澄清我上面写的内容,我正在尝试从一个不活动的选项卡中获取数据。到目前为止,我只能让script.js在活动选项卡中响应。我的理由是,为了用ChromeAPI刮取一个页面,它必须在一个选项卡中打开;但是,我不希望打开的选项卡中断用户的web浏览,因此使用非活动

我正在制作一个烂番茄扩展,如果你输入电影名称,它将显示评论家/观众的得分。现在,我正在尝试让我的背景脚本与内容脚本通信,以操纵打开的电影选项卡的DOM。有一个小问题:content js只能在侦听活动选项卡上的消息集时打印到屏幕上

编辑:为了澄清我上面写的内容,我正在尝试从一个不活动的选项卡中获取数据。到目前为止,我只能让script.js在活动选项卡中响应。我的理由是,为了用ChromeAPI刮取一个页面,它必须在一个选项卡中打开;但是,我不希望打开的选项卡中断用户的web浏览,因此使用非活动选项卡。如果有人有更简单的方法来做这件事,我洗耳恭听

background.js(这很有效)

但不是这个:

chrome.runtime.onMessage.addListener(
    function(request,sender,sendResponse){
        if(request.message==="clicked_browser_action"){

            chrome.tabs.query({"currentWindow":true},function(tabs){
                var activeTab = tabs[tabs.length-1]; //find last tab
                console.log(activeTab)
                chrome.tabs.sendMessage(activeTab.id, {"message":"message2Tab"})
            })
        }
    })
content.js:

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    console.log('started')
    if( request.message === "message2Tab" ) {
    console.log('started')

    }
  }
);
popup.html

<!DOCTYPE html>
<script src="jquery-3.1.1.min.js"></script>
<script src="popup.js"></script>
Search RT for Movie: <input type="text" value=""><input type="submit" id="rt">
</div>

搜索电影:
manifest.json

{
    "manifest_version":2,
    "name":"extension",
    "version":"0.1",
    "content_scripts":[
        {
            "matches": [
                "<all_urls>"
            ],
            "js":["content.js"]
        }],
    "browser_action":{
                "default_icon":"icon.png",
                "default_popup":"popup.html"
            }
        ,
    "background":{
        "scripts":["background.js"]
    },
    "permissions":[
        "tabs"
    ]

}
{
“清单版本”:2,
“名称”:“扩展名”,
“版本”:“0.1”,
“内容脚本”:[
{
“匹配项”:[

“。非常感谢您迄今为止的帮助

我使用chrome存储在选项卡之间进行通信:

content.js

chrome.storage.local.set({"keyName": [critics,audience,title]},function(){console.log('mah critics stored')});
popup.js

  chrome.storage.local.get("keyName",function(items) {
        console.log(items)
        console.log(items.keyName)
        var criticsscore = items.keyName[0]
        var audiencescore = items.keyName[1]
        $('#criticsscore').html('Critics ' + criticsscore)
        $('#audiencescore').html('Audience ' + audiencescore)
        $('#title').html(items.keyName[2])
    // Do something with items.keyName
});
});    

    chrome.storage.local.get("keyName",function(items) {//initialize the application
        console.log(items)
        console.log(items.keyName)
        var critics = items.keyName[0]
        var people = items.keyName[1]
        $('#criticsscore').html('Critics ' + critics)
        $('#audiencescore').html('Audience ' + people)
        $('#title').html(items.keyName[2])

    // Do something with items.keyName
});

我不需要查看控制台输出,我只想从该页面检索文本。请回答主题中的问题:包括复制问题的完整内容。包括manifest.json、一些后台/内容/弹出脚本/HTML。寻求调试帮助的问题(“此代码为什么不起作用?”)必须包括:►想要的行为,►特定的问题或错误,以及►在问题本身中重现问题所需的最短代码。没有明确问题说明的问题对其他读者没有用处。请参阅:“如何创建问题解决方案?”“,和。好的,我更新了我的问题,以防在发布之前不清楚我的要求。谢谢。我在开发一个扩展时遇到了同样的问题。你最终找到解决方案了吗?”?
  chrome.storage.local.get("keyName",function(items) {
        console.log(items)
        console.log(items.keyName)
        var criticsscore = items.keyName[0]
        var audiencescore = items.keyName[1]
        $('#criticsscore').html('Critics ' + criticsscore)
        $('#audiencescore').html('Audience ' + audiencescore)
        $('#title').html(items.keyName[2])
    // Do something with items.keyName
});
});    

    chrome.storage.local.get("keyName",function(items) {//initialize the application
        console.log(items)
        console.log(items.keyName)
        var critics = items.keyName[0]
        var people = items.keyName[1]
        $('#criticsscore').html('Critics ' + critics)
        $('#audiencescore').html('Audience ' + people)
        $('#title').html(items.keyName[2])

    // Do something with items.keyName
});