0

チームが作成しようとしている作業を固定するのに役立つFirefoxアドオンを使い始めたばかりです:特定のサイト(mysite.com/inputと呼びましょう)にいるとき:クリップボードに保存されている値からの「textinput」。ええ、それは簡単ですが、それを貼り付けるだけで十分ですよね?...今ここにひねりがあります:

値の別の形式が必要です。クリップボードでは x/y/z です。database.com?s=x/y/zのように検索すると、ID があるため正しい値を取得できるページが直接表示されるデータベース サイト (database.com としましょう) があります。 #結果

ページとコンテンツ スクリプトの間で適切に通信する方法がわかりません。pagemod と page-worker をどの順序で使用すればよいかさえわかりません。

私を助けてください!ありがとうございました!

4

2 に答える 2

2

基本的なフローは次のとおりです。

  • コンテンツスクリプトでは、何らかの形でフォームから値を取得します。それはあなたにお任せします。

  • 引き続きコンテンツスクリプトで、self.port.emitを使用してデータをmain.jsに送信します。

コード:

self.port.emit('got-my-value', myValue);
  • main.jsでは、「got-my-value」イベントを受け取り、リクエストモジュールを使用してクロスドメインリクエストを行います。

コード:

require('page-mod').PageMod({
    include: 'somesite.com',
    contentScriptFile: data.url('somescript.js'),
    onAttach: function(worker) {
        worker.port.on('got-my-value', function(value) {
            require('request').Request({
                url: 'http://someurl.com',
                onComplete: function(response) {
                    console.log(response);
                    // maybe send data back to worker?
                    worker.port.emit('got-other-data', response.json);
                }
            }).post();
        });
    }
});
  • 元のワーカーでデータを受信する必要がある場合は、イベントの別のリスナーが戻ってきます。

コード:

self.port.on('got-other-data', function(value) {
    // do something
})
于 2013-01-21T05:03:06.720 に答える
0

これを見つけるまで、過去2日間同じ問題に苦しんでいました:

https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Content_Scripts/Cross_Domain_Content_Scripts

それらは次のことを示します。

ただし、 「permissions」キーの下にある「cross-domain-content」キーの下でアドオンのpackage.jsonに追加することで、特定のドメインに対してこれらの機能を有効にすることができます。

 "permissions": {
     "cross-domain-content": ["http://example.org/", "http://example.com/"] } 

リストされたドメインにはスキームと完全修飾ドメイン名が含まれている必要があり、これらはコンテンツを提供するドメインと正確に一致する必要があります。したがって、上記の例では、コンテンツ スクリプトは https://example.com/から提供されるコンテンツにアクセスできません。 . ワイルドカードは使用できません。この機能は現在、コンテンツ スクリプトでのみ使用できます。アドオンに同梱されている HTML ファイルに含まれるページ スクリプトでは使用できません。

それは私のためにトリックをしました。

于 2014-12-24T00:26:12.613 に答える