0

この質問にはすでに多くのバリエーションが存在することは知っていますが、どれも私にはうまくいかないようです.

詳細:

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

4

1 に答える 1

0

こんにちは、おそらくあなたの問題の3つの理由:

  1. main.js と gmailr.js から bgp にメッセージを送信する方法は、コンテンツ スクリプトから bgp に通信するために到着する必要があるため、おそらく間違っています。(マニフェスト コンテンツ スクリプト キーに gmailr.js がありません)。あなたのコードを見せてください。

  2. content.js から検索して main.js で作成した要素にアクセスする瞬間に問題があるようです。jQuery $("").on() メソッドで要素にアクセスしようとしていますか? 簡単なテストでは、ある cs で関数を宣言し、別の cs で使用する必要があります。機能しない場合は、明らかな問題です。マニフェスト コンテンツ スクリプト キーで .js ファイルを宣言する順序も重要です。

  3. マニフェスト コンテンツ スクリプト配列 "run_at":"document_end" を試してください

それが役立つことを願っています!

于 2013-05-24T21:52:45.490 に答える