我正在制作烂番茄扩展,如果你输入电影名称,它将显示评论家/观众得分。现在,我正在尝试让我的后台脚本与内容脚本进行通信,以操作打开的电影选项卡的DOM。存在一个小问题:内容js只能在监听活动选项卡上设置的消息时打印到屏幕上。
编辑:为了澄清我上面写的内容,我试图从非活动选项卡中抓取数据。到目前为止,我只能让script.js在活动选项卡中响应。我推断,为了用chrome api刮一页,必须在标签中打开;但是,我不希望打开的选项卡中断用户的网上冲浪,因此不活动的选项卡。如果某人有更容易的方法去做这件事我就是全部的耳朵。background.js(这可行)
chrome.runtime.onMessage.addListener(
function(request,sender,sendResponse){
if(request.message==="clicked_browser_action"){
chrome.tabs.query({"active":true, "currentWindow":true},function(tabs){
console.log(tabs)
var activeTab = tabs[0];
console.log(activeTab)
chrome.tabs.sendMessage(activeTab.id, {"message":"message2Tab"})
})
}
})
但不是这样:
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"
]
}
我在earlier SO question发布了完整的代码。非常感谢你的帮助到目前为止
答案 0 :(得分:0)
我使用chrome存储来在标签之间进行通信:
content.js
view.setLayoutParam(params)
popup.js
chrome.storage.local.set({"keyName": [critics,audience,title]},function(){console.log('mah critics stored')});