我已经阅读了有关如何从后台javascript文件(main.js)向内容脚本(content.js)发送消息的文档,但我无法让onMessage打开我的警报。
Manifest.json
{
"name": "Example",
"version": "1.0.1",
"manifest_version" : 2,
"description": "Example Description",
"background" : {
"scripts" : ["main.js"]
},
"page_action" : {
"default_icon": {
"19": "icons/19.png",
"38": "icons/38.png"
},
"default_title" : "Example Title"
},
"content_scripts": [{
"matches": ["<all_urls>"],
"js": ["lib/jquery-1.8.3.min.js","scripts/content.js"],
"run_at": "document_idle",
"all_frames": false
}],
"permissions": [
"tabs",
"geolocation"
],
"icons": {
"16": "icons/16.png",
"48": "icons/48.png",
"128": "icons/48.png"
}
}
后台javascript文件(main.js)
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
chrome.tabs.sendMessage(tabs[0].id, {action: "SendIt"}, function(response) {});
});
内容javascript文件(content.js)
chrome.extension.onMessage.addListener(function(msg, sender, sendResponse) {
if (msg.action == 'SendIt') {
alert("Message recieved!");
}
});
发布于 2014-01-18 17:22:38
感谢@Teepeemm的洞察,我在将消息发送到内容脚本之前包含了一个tab加载完成。
等待选项卡完全加载
chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
if (changeInfo.status == 'complete') {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
chrome.tabs.sendMessage(tabs[0].id, {action: "SendIt"}, function(response) {});
});
}
});
发布于 2014-01-16 06:05:22
旁白:chrome.extension.onMessage
已被弃用,您应该使用chrome.runtime.onMessage
-尽管我不相信这会解决您的问题。
我记得我在使用内容脚本注入一个精简的jquery文件时遇到了一个问题。尝试使用未压缩的版本(例如jquery-1.8.3.js)。完成此操作后,还要在清单文件中的web_accessible_resources
中添加jquery-1.8.3.js
。(阅读有关该here的信息)
如果仍然不起作用,我的最后一个建议是将"<all_urls>"
添加到清单中的权限数组中。
发布于 2014-01-17 13:15:54
如果让每个脚本声明它的存在(相对于alert
,我更喜欢console.log
),您会看到后台脚本只运行一次(在安装或启动时),而内容脚本则随每个新页面一起运行。这意味着你需要一些外部事件来触发消息。就像这样
chrome.pageAction.onClicked.addListener(function(tab) {
chrome.tabs.sendMessage(tab.id,{action:"SendIt"});
});
并且不要忘了适当地调用chrome.pageAction.show(tabId);
。
https://stackoverflow.com/questions/21148115
复制相似问题