我知道這裏已經存在這個問題的很多變體,但它們都不適合我。Chrome擴展中的腳本之間的通信
詳情:
我正在寫就會從您在Gmail中發送郵件的一些電子郵件數據的擴展。爲了實現這一點,我正在使用這個版本的Gmailr https://github.com/joscha/gmailr。
實際上,我有三個內容腳本:Gmailr.js和main.js(這是幾乎等同於那些在上面的鏈接)讓我拉出來,我尋找的信息。然後我用content.js發送消息到擴展的後臺頁面。
問題是,從gmailr.js和main.js我不能使用任何的Chrome API,我不知道爲什麼,所以我不能發送消息從這些回到後臺頁面。
這就是爲什麼我能與背景頁面通信content.js。但是,它似乎無法看到其他內容腳本所做的任何事情。例如,main.js在頁面的頂部插入一個div。當我嘗試從content.js將一個事件監聽器附加到此div中的按鈕時,我被告知不存在這樣的元素。
我怎樣才能獲得通過main.js數據拉出通過content.js可以看到? (我也嘗試將數據放在本地存儲中,然後觸發自定義事件偵聽器來告訴content.js讀取本地存儲,但沒有運氣,因爲它們似乎無法聽到對方的事件被觸發)。
任何瞭解或備選的大加讚賞。
(我可以在必要時發佈的代碼,但它是零散和長)
我的清單文件:
{
"manifest_version": 2,
"name": "Email extractor",
"description": "Extracts data from emails",
"version": "1.0",
"background": {
"script": "background.js"
},
"content_scripts": [
{
"matches": [
"*://mail.google.com/*",
"*://*/*"
],
"js": [
"lib/yepnope.js/yepnope.1.5.4-min.js",
"lib/bootstrap.js",
"main.js",
"gmailr.js",
"content.js"
],
"css": [
"main.css"
],
"run_at": "document_end"
}
],
"permissions": [
"tabs",
"storage",
"background",
"*://mail.google.com/*",
"*://*/*"
],
"browser_action": {
"default_icon": "img/icon.png",
"default_popup": "popup.html"
},
"web_accessible_resources" : [
"writeForm.js",
"disp.js",
"/calendar/jsDatePick.min.1.3.js",
"/calendar/jsDatePick_ltr.min.css",
"lib/gmailr.js",
"lib/jquery-bbq/jquery.ba-bbq.min.js",
"content.js",
"main.js",
"background.js"
]
}
這是main.js:
Gmailr.init(function(G) {
sender = G.emailAddress();
G.insertTop($("<div id='gmailr'><span></span> <span id='status'></span>)");
el = document.getElementById("testid");
el.addEventListener('click', mg, false);
var status = function(msg) {
G.$('#gmailr #status').html(msg); };
G.observe(Gmailr.EVENT_COMPOSE, function(details) {
....
status(" user: " + user);
console.log('user:', user);
//now try to send a message to the background page
//this always returns the error that method sendMessage does not exist for undefined
chrome.runtime.sendMessage({greeting: "test from gmailr"}, function(response) {
console.log("did it send?");
});
});
});
gmailr.js是很長,也不是我自己的代碼,但它可以看這裏:perhap http://pastebin.com/pK4EG9vh
我們能否看到您的擴展程序的清單文件?你的所有權限設置正確嗎? – sffc