この質問にはすでに多くのバリエーションが存在することは知っていますが、どれも私にはうまくいかないようです.
詳細:
gmail で送信したメールからメール データを取得する拡張機能を作成しています。これを実現するために、このバージョンの Gmailr https://github.com/joscha/gmailrを使用しています。
実際には、3 つのコンテンツ スクリプトがあります。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 は非常に長く、私自身のコードでもありませんが、ここで見ることができます: http://pastebin.com/pK4EG9vh