2

プロジェクトの場合、現在開いているメッセージの本文を取得し、そのメッセージを Web サービスに渡して、そのデータの一部を処理および保存する必要があります。

これを行う最善の方法は、拡張機能を使用してメッセージ本文 (およびいくつかの追加情報) を取得し、それを webrequest としてサービスに送信してデータベースに挿入することだと思いました。

しかし、私はこれをどのように処理すればよいかわかりません。いくつかのチュートリアルに従って chrome プラグインを使い始めましたが、メッセージの本文を取得する方法が見つかりません。

そのためのコンテンツ スクリプトが必要であることがわかりましたが、それでも私には手がかりがありません。

誰でもこれについて有利なスタートを切ることができますか?

4

8 に答える 8

1

これはあなたのプロセスがどうあるべきかです:

  1. メッセージが開かれると、メール本文または gmail のどこかにボタンが表示されます。

  2. ボタンをクリックすると、メールの本文がコピーされ、Web サーバーにプッシュされます。

  3. メッセージを自動的にコピーして貼り付けたい場合は、デフォルトでこのボタンをクリックすることができます。

このプロセスのために-

  1. ファイルを作成しcontent_script.js、ボタンを gmail DOM に配置します。

  2. ボタンをクリックするeventpage.jsと、メッセージが送信され、メッセージには現在開いている電子メールの本文が含まれます。私は使用していないことに注意してください。background.jsただし、代わりにeventpage.jsGoogleが使用を避けるように求めているためbackground.js、どちらも永続性の違いはほとんどありません。

  3. Web サーバーはメッセージを取得して保存できます。

ボタン プロセスを回避したい場合はcontent_script.j、電子メール メッセージのオープン イベントを自動的に検索し、上記のプロセスを繰り返す必要があります。ただし、コピーしたくないメッセージをクリックする場合があるため、ボタンはそのままにしておくことをお勧めします。

于 2016-10-25T12:26:17.493 に答える
1

これが私が思いついたコードです。必ず追加セクションにボタンを追加し、それらにカウント付きのIDを付けてください。これは、div がロードされたときにクリックまたはオンロードで到着するのを待機し、指定された領域に追加されたマテリアルを挿入します。これらは静的であるため、ランダム クラスについて心配する必要はありません。コードは 2 年間動作しています。

    window.addEventListener("DOMNodeInserted", function(event) {
       //TEST TO SEE WHERE CSS IS AT
        // $(event.target).append($(event.target).parent()[0].className);
        if($(event.target).parent()[0].className == 'oc gU')
        {

            //ADD SEND BUTTON FOR MESSAGES
            //SUBJECT OF ENTIRE EMAIL GLOBAL
            var subject = $(event.target).parents().eq(28).children(1).find(".hP").text();

            //GET DATA EMAIL AND NAME 
            //Can assign via id or data-name and jid for email
            var imageid = $(event.target).parents().eq(18).find("img[jid]").attr("id");

           //THIS IS THE SEND BUTTON IN REPLAY ADD A BUTTON NEXT TO IT WITH THIS                     
           $(event.target).parents().eq(1).find(".gU.Up").children(0).append("addbuttonid here");
           //set click event for button
            $('#'+addbuttonid).click(function(){       
                //TO DO HERE
                //BODY FROM the REPLY MESSAGE
                var body = $(event.target).parents().eq(11).find('.Am').text();
                //PREVIOUS THREAD MESSAGES OPTIONAL
                var body = body + $(event.target).parents().eq(11).find('.gmail_extra').text();

            });


        }
        else if($(event.target).parent()[0].className == "aCi")
        {
           //THREAD MESSAGE
           //GET EMAIL SUBJECT
           var subject = $(event.target).parents().eq(17).children(1).find(".hP").text();
           //GET TO INFO
           var to = $(event.target).parents().eq(7).find('.g2');
           //GET NAME AND EMAIL
           var imageid = $(event.target).parents().eq(7).find("img[jid]").attr("id");
           var value = $("#\\"+imageid).attr("jid");
           var vname = $("#\\"+imageid).attr("data-name");
           //GET DOCUMENT BODY
           var tmp = $(event.target).parents().eq(6).find(".gs");
           var body = tmp.text();

           //GET DOCUMENT DATE
           var date = $(event.target).parents().eq(7).find('.g3').attr('title');
           date = date.replace(" at ", " ");
           //ADD THE BUTTONS HERE WITH INITIAL VALUES
            $(event.target).parents().eq(6).append('addbutton2');

            $("#"+addbutton2).click(function(event){
                var email = $("#\\"+$(this).attr("data-imageid")).attr("jid");
                var name = $("#\\"+$(this).attr("data-imageid")).attr("data-name");
                var body = $(this).attr("data-body");
                //TOD FOR BUTTON NEXT TO REPLY ICON ON THREAD AS OPENED

            });

        }
});

このコードでわかるように、返信セクションまたはスレッド内の任意のメッセージと、ようこそ :) のいずれかにボタンを gmail UI に追加できるようになりました。これは、Chrome 拡張機能を介して機能することを自分で行わない限り、そこにある唯一のコードです。ページからデータを取得できるため、Gmail.js や API の使用は必須ではありません。

于 2015-03-24T06:43:55.387 に答える
1

これは古い質問ですが、数日間試行した結果、答えが見つかりました。電子メールのタイトルを取得するには、クラス名 hP で見つかる電子メールのタイトルを含む HTMLCollection を反復処理します。

var list= document.getElementsByClassName("hP");
for (var i = 0; i < list.length; i++) {
    console.log(list[i].innerText);
}

メール本文を取得するには、メール本文を含む HTMLCollection を反復処理します (クラス ii):

var list= document.getElementsByClassName("ii");
for (var i = 0; i < list.length; i++) {
    console.log(list[i].innerText);
}
于 2018-05-14T23:36:38.650 に答える
0

これを行う必要がある場合は、GMAILクライアントの本文を含むDIVのIDを見つけようとします...jQueryを使用してDIVのHTMLまたはテキストコンテンツを取得するのは非常に簡単です...見てください:http ://api.jquery.com/html/

単純なjQueryセレクターは次のようになります。

$("#gmailsBodyDivID").html()

jQueryがオプションでない場合は、JavaScript getElementByID(http://www.w3schools.com/jsref/met_doc_getelementbyid.asp)を使用してDIVを取得できます。

最後に、DudeOnRockで述べられているように、WebサービスへのAjaxリクエストを使用する必要があります。

難しいのは、Gmailが探しているDIVにどのように名前を付けているかを知ることです...ちょっと見てみると、奇妙な名前が付けられていました...

<div id=":w1" class="ii gt adP adO"><div id=":w2">

「:w1」または「:w2」が何を表しているのか、jQueryセレクターでそれらを使用する方法もわかりません...おそらくもっと知識のある人がそこに光を当てるかもしれません。

...だから私はあなたが最初にそれに焦点を当てるべきだと思います...

IDが難しい場合は、クラス名でjQueryセレクターを使用することをお勧めします...

それで頑張ってください!

于 2012-12-19T02:27:21.673 に答える
0

あなたのプロジェクトの正確な要件が何であるかはわかりませんが、それらの電子メールを転送する電子メール アドレスを設定することは可能でしょうか?

そこから、好みの言語でサーバーをセットアップして、新しいメールをチェックして処理するだけです (コンテンツのフィルタリング、データベースへの挿入など)。

利点:

  • Chrome + 拡張機能の使用に縛られることはありません
  • 任意のブラウザ、デバイス、メール アプリを使用してメールを転送できます
  • 乱雑な Gmail の HTML を解読する必要はありません
  • Gmail の HTML/JS/CSS を変更しても、内部プロセスが中断されることはありません
  • Chrome拡張機能の変更を維持/更新する必要はありません(そして変更されます)
于 2013-05-29T16:31:55.273 に答える
-1

Chrome 拡張機能は基本的に JavaScript で記述されています。あなたがやろうとしていることは、少なくとも JavaScript の理解がなければかなり難しいでしょう。Web サイトの要素にアクセスするには、JavaScript を使用した DOM 操作について学ぶことをお勧めします。Web サイトにデータを送信するには、HTTPRequests (AJAX) を使用する必要があります。

于 2012-12-14T23:33:07.243 に答える