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