2017-09-08 17 views
0

バックグラウンドスクリプトからコンテンツスクリプトにいくつかのパラメータを送信して、コンテンツスクリプトを実行する必要があります。私は...Chrome拡張:背景とコンテンツスクリプト間の通信

https://developer.chrome.com/extensions/content_scripts#pi

をこのようなヘルプページのカップルを調査し...しかし、まだそれを整理する方法は考えています。

背景スクリプトの抜粋::Firefoxの拡張機能では、私は次のことをやった

browser.tabs.executeScript({ 
       file: "content/login.js" 
      }).then(messageContent).catch(onError) 
} 

function messageContent() { 

    var gettingActiveTab = browser.tabs.query({active: true, currentWindow: true}); 

    gettingActiveTab.then((tabs) => { 
      browser.tabs.sendMessage(tabs[0].id, {loginUserName: loginUserName, loginPassword: loginPassword}); 
        }); 
} 

コンテンツスクリプトの抜粋:

function justDoTheJob(request, sender, sendResponse) { 

    var doc = window.content.document; 

    doc.getElementById("loginUserName").value = request.loginUserName; 
    doc.getElementById("loginPassword").value = request.loginPassword; 

} 

browser.runtime.onMessage.addListener(justDoTheJob); 

しかし、私はChromeでそのような何かを行うときに、私は次のようになる:

tabs.query:TypeError:Object.callbackで未定義のプロパティ 'then'を読み取ることができません。

誤った構文を使用しているか、間違った構造を使用しているようです。あなたは私にそれを正しく行うための手がかりを教えてもらえますか?

おかげで、 ラクーン

+3

chrome APIはプロミスベースではないため、コールバックに切り替えるか、[polyfill](https://github.com/mozilla/webextension-polyfill)を使用する必要があります。 – wOxxOm

+0

ありがとうございます。だからバックグラウンドスクリプトからコンテンツにいくつかのパラメータを送信するコールバックを使用する方法?どんな例ですか? – Racoon

答えて

1

@qwOxxOmはコメントで指摘するように、あなたは、代わりにthen()で追加の、例えば、Chromeでのコールバックを使用して、コール自体の引数チェーンにthen内部の機能を移動する必要があります。それ以外の場合はかなり使われているのと同じ方法:

chrome.tabs.executeScript({file: "content/login.js"}, myCallback); 

function callback(result) { 
    // handle result here 
} 

など:あなたはlastErrorをチェックする代わりに、それのためのコールバックを使用してしまうよう

function messageContent() { 
    chrome.tabs.query({active: true, currentWindow: true}, (tabs) => { 
    // sendMessage here 
    }) 
} 

など

エラー処理は少し異なっています。

Firefoxの場合はchromeという名前空間を使用することもできます(考慮する必要のある2つのブラウザ/名前空間にはいくつかの違いがあります)。

+0

あなたの助けを借りて、それは動作します! – Racoon