1

我正在使用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中传递的消息。

任何帮助表示赞赏。

+1

你有没有尝试在'function(){}'包装中包装'onclick'赋值?似乎并不重要,但有时候JavaScript会很奇怪。 ''onclick“:function(){returnMessage(”test“); }' – freginold

+1

这样可以防止警报在加载扩展后立即闪烁,现在我可以使用上下文菜单条目触发第一条警报,但是,我仍然没有收到第二条警报,看起来好像消息不是' t被内容脚本拾取。 –

+1

你在控制台中是否收到任何错误或消息? – freginold

回答

0

从意见以建议我可以改变背景脚本以下:

//lead_partner_search.js 
function returnMessage() { 
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
     chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}); 
    }); 
} 

chrome.contextMenus.create({ 
    "title": "Search leads by company name", 
    "contexts": ["selection"], 
    "onclick": returnMessage 
}) 

和我的内容脚本以下:

//lead_partner_search_content.js 
chrome.runtime.onMessage.addListener(function(request, sender) { 
    console.log("Contentscript has received a message from background script: '" + request.greeting + "'"); 
}); 

这将产生所需的输出控制台:

Contentscript收到来自后台脚本的消息:'hello'

基于我现在明白了,似乎我打电话的消息的一部分,并不存在request.message我应该一直在呼吁request.greeting,因为这是从后台发送消息时,我正在申报脚本。

相关问题