4

Chrome 拡張機能をコーディングしようとしていますが、このコードを含む background.html があります。

var x = "test";

function tabChanged(id, info, tab){
    if(info.status == 'complete'){
        chrome.tabs.executeScript(id, {code:"try{alert(x);}catch(e){alert(e);}"}, null);
    }
}

chrome.tabs.onUpdated.addListener(tabChanged);
chrome.tabs.getAllInWindow(null,function(tabs){
    for(var index=0; index < tabs.length; index++){
        chrome.tabs.executeScript(tabs[index].id, {code:"try{alert(x);}catch(e){alert(e);}"}, null);
    }
});

ただし、executeScript 内では、変数 "x" は常に未定義です。

executeScript から x を取得/設定するにはどうすればよいですか? メッセージングを使用せずに。

4

3 に答える 3

3

コンテンツ スクリプトは、Web ページのコンテキストで実行されます。詳細については、Chrome ドキュメントのコンテンツ スクリプトのセクションを参照してください。

バックグラウンド ページからに文字列変数を渡したい場合chrome.tabs.executeScriptは、次のようにする必要があります。

var x = "test";
chrome.tabs.executeScript(id, {code:"var x = '"+x+"'; try{alert(x);}catch(e){alert(e);}"},null);

変数を変更する場合、方法は 1 つだけです - メッセージング:

var x = 1;
console.log('x=' + x);

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    console.log(request);
    if(request.command == 'setVar') {
        window[request.name] = request.data;
    }
});

chrome.browserAction.onClicked.addListener(function() {
    var code = "chrome.extension.sendRequest({command: 'setVar', name: 'x', data: 2});";
    chrome.tabs.executeScript(null, {code:code});
    window.setTimeout(function(){console.log('x=' + x);}, 1000);
});
于 2012-05-22T18:51:05.060 に答える
-1

変数が未定義の理由は、文字列内で変数を参照しているためです。これを行うだけで済みます。

var yourVar = "your variable"
   //define your variable
chrome.tabs.executeScript({code: 'Your code here' + yourVar + ';}'})
   //then format it like this ({code: "Your code as a string" + your variable + "code"})

後で変数を変更したい場合は、新しい変数を使用して同じことを行うだけでなく、非常に簡単です

于 2014-08-21T20:57:27.543 に答える