2

documentation for chrome.tabs.executeScriptMDN)によると、コールバック関数は、スクリプトの実行から「結果の配列」を受け取ります。どのように正確に結果を得るためにこれを使用していますか?私のすべての試みは、undefinedがコールバックに渡されることになります。chrome.tabs.executeScript():コンテンツスクリプトの結果を取得する方法は?

Uncaught SyntaxError: Illegal return statementを投げたコンテンツスクリプトの最後に値を返そうとしました。私は、オプションのコードオブジェクト引数{code: "return "Hello";}を使用してみましたが、成功しませんでした。

ドキュメンテーションの「注入されたすべてのフレームのスクリプトの結果」が意味することを理解していないように感じます。

+0

[chrome.tabs.executeScript(id、details、callback)について]の可能な複製(http://stackoverflow.com/questions/13166293/about-chrome-tabs-executescript-id-details-callback) – rsanchez

+0

@ rsanchez重複した回答かもしれませんが、この質問にはより良い、より具体的な質問タイトルがあります。もう一つはかなり一般的です。 – RayfenWindspear

答えて

4

chrome.tabs.executeScript()は、スクリプトが実行される各タブ/フレームから「スクリプトの結果」を返します。Array

"スクリプトの結果"は、最後に評価されたステートメントの値です。関数(つまり、returnステートメントを使用するIIFE)によって返された値になります。一般的には、Web Console(F12)からコード/スクリプトを実行した場合(たとえば、スクリプトvar foo='my result';foo;の場合は、console.log()ではなく、実行の結果として表示されるのと同じことになります) results配列には、文字列 "my result"が要素として含まれます)。コードが短い場合は、コンソールからコードを実行してみてください。ここで

another answer of mineから取られたいくつかのサンプルコードです:

chrome.browserAction.onClicked.addListener(function(tab) { 
    console.log('Injecting content script(s)'); 
    //On Firefox document.body.textContent is probably more appropriate 
    chrome.tabs.executeScript(tab.id,{ 
     code: 'document.body.innerText;' 
     //If you had something somewhat more complex you can use an IIFE: 
     //code: '(function(){return document.body.innerText;})();' 
     //If your code was complex, you should store it in a 
     // separate .js file, which you inject with the file: property. 
    },receiveText); 
}); 

//tabs.executeScript() returns the results of the executed script 
// in an array of results, one entry per frame in which the script 
// was injected. 
function receiveText(resultsArray){ 
    console.log(resultsArray[0]); 
} 

これは、ブラウザのアクションボタンがクリックされたときに<body>.innerTextを取得するには、コンテンツのスクリプトを挿入します。 activeTab権限が必要です。

これらが作り出すものの一例として、あなたが返されるかを確認するdocument.body.innerText;または(function(){return document.body.innerText;})();でWebページコンソール(F12)とタイプを開くことができます。

+0

ドキュメンテーションは説明だけでは十分ではありませんか、JavaScriptの世界では、「スクリプトの結果」の意味を知っているはずですか? – RayfenWindspear

+1

@RayfenWindspear、IMO:ドキュメントが不十分です。はるかに明確になるかもしれない。それがどのように言われているかを考えると、私は最初にドキュメンテーションを読んだときに、「スクリプトの結果」(および検証するためのテスト)が意味するものについて瞬間を考えなければなりませんでした。これは可能性が最も高い可能性があります.JavaScriptを少し熟知して推測できる可能性があります。 – Makyen

関連する問題