0

私はEventListenerと 関数を持っていますgenerator.gettext。コード:

var generator = {
    gettext: function (mytext) {
        //I send a message which is intercepted by my content script. 
        //Later my content script will send a reply back which will be processed by 'receiver'
        window.postMessage({
            type: "MESSAGE",
            text: mytext
        }, "*");
        while (generatedtext == "") {
            //WAIT until generatedtext is set by 'receiver'
        }
        return generator.generatedtext;
    },

    generatedtext: ""
};

function receiver(event) {
    if (event.data.type && (event.data.type == "FROM_CONTENTSCRIPT")) {
        generator.generatedtext = event.data.text;
    }
}
window.addEventListener('message', receiver, false);

generator.gettext私はそれを返したいのですが、それを設定するgenerator.generatedtextまで待つことはできませんreceiver。が呼び出さEventListenerれている間はロックされている印象があります。generator.gettext非同期になり、コールバックパラメーターを使用するように変更する必要がありますが、これは初めてで、機能させる方法がわかりません。誰か助けてくれませんか?

編集:私がやりたいことは、Web サイトで入力を処理することです。Javascript ファイルがあり、コンテンツ スクリプトによって入力が処理されるようにします。ハードドライブ上の変更されたファイルに javascript ファイルをリダイレクトしました。JavaScript が入力をロードする行を変更します。テキストを送信すると、Javascript ファイルは、var message = generator.gettext(mytext.value);上記のコードがページに挿入され、mytext をコンテンツ スクリプトに送信し、コンテンツ スクリプトの出力を返さなければならないようなものを呼び出します。

4

1 に答える 1

0

あまり明確ではありませんが、あなたが求めていることを理解していると思います。

メッセージを投稿していて、その結果を generator.generatedtext に保存したいとします。あなたはすでにそうしています。

var generator = {
    generatedtext:'',
    gettext: function (mytext) {
        window.postMessage({
            type: "MESSAGE",
            text: mytext
        }, "*");
    }
};

window.addEventListener('message', function(ev){
    if (event.data.type && (event.data.type == "FROM_CONTENTSCRIPT")) {
        generator.generatedtext = event.data.text;
    }
},false);

あなたが行おうとしているが明確にしていない他の使用法がない限り、必要なのはこれだけです。メッセージ イベント リスナは、受信したメッセージを generator.generatedtext に割り当てているため、generator.gettext() に何かを返す必要はありません。

これがあなたが望んでいたものではない場合は、詳細をコメントに投稿してください。私はあなたを助けようとします.

于 2012-10-07T01:03:23.483 に答える