我正在使用JavaScript使用Chrome扩展,并且需要能够使用上下文菜单中的自定义条目将消息从后台脚本传递到内容脚本,作为触发器。如何通过上下文菜单将消息从Chrome扩展后台脚本传递到JavaScript中的内容脚本?
manuscript.json
{
\t "manifest_version": 2,
\t "name": "Admin Tools",
\t "version": "0.3",
\t
\t "permissions": [
\t \t "contextMenus",
\t \t "tabs",
\t \t "activeTab"
\t ],
\t
\t "content_scripts": [
\t \t {
\t \t \t "matches": ["https://*/*", "http://*/*"],
\t \t \t "js": ["lead_partner_search_content.js"]
\t \t }
\t ],
\t
\t "background": {
\t \t "scripts": ["admin_search.js", "company_id_search.js","order_id_search.js","lead_partner_search.js"]
\t }
}
lead_partner_search.js(背景脚本)
//lead_partner_search.js
var backgroundScriptMessage = " purple monkey dishwasher";
function returnMessage(messageToReturn) {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
var joinedMessage = messageToReturn + backgroundScriptMessage;
alert("Background script is sending a message to contentscript:'" + joinedMessage +"'");
chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"});
});
}
chrome.contextMenus.create({
\t "title": "Search leads by company name",
\t "contexts": ["selection"],
\t "onclick": returnMessage("test")
})
lead_partner_search_content.js(内容脚本)
//lead_partner_search_content.js
chrome.runtime.onMessage.addListener(function(request, sender) {
alert("Contentscript has received a message from from background script: '" + request.message + "'");
return true;
});
在从堆栈溢出another例如,本应显示一个警报为:
背景脚本发送给内容的信息:'测试紫猴洗碗机'
再进行第二次为:
Contentscript已收到来自后台脚本的消息:“测试紫色猴子洗碗机”
然而,实际发生的事情是,当分机加载时,第一条消息警报立即出现,即使触发上下文菜单条目也不会发生任何进一步的情况。
尽管在Google Chrome浏览器上搜索此信息和其他网站,但我不确定为什么这么做,也不能完全理解在Google Chrome中传递的消息。
任何帮助表示赞赏。
你有没有尝试在'function(){}'包装中包装'onclick'赋值?似乎并不重要,但有时候JavaScript会很奇怪。 ''onclick“:function(){returnMessage(”test“); }' – freginold
这样可以防止警报在加载扩展后立即闪烁,现在我可以使用上下文菜单条目触发第一条警报,但是,我仍然没有收到第二条警报,看起来好像消息不是' t被内容脚本拾取。 –
你在控制台中是否收到任何错误或消息? – freginold