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,因爲這是從後臺發送消息時,我正在申報腳本。

相關問題