0

バックグラウンド スクリプトからコンテンツ スクリプト リクエストの値を取得できません。

content_script.js
=================
var elements = undefined
var properties = undefined
var targets = undefined
chrome.extension.sendRequest({greeting: "elements"}, function(response) {
    elements = response.input;
});
if (elements == undefined){
    var elements = ["a","img"];
}else{
    elements = elements.split(',');
}
chrome.extension.sendRequest({greeting: "properties"}, function(response) {
    properties = response.input;
});
if (properties == undefined){
    var properties = ["alt","id","class"];
}else{
    properties = properties.split(',');
}
chrome.extension.sendRequest({greeting: "targets"}, function(response) {
    targets = response.input;
});
if (targets == undefined){
    var targets = ["onclick","href"];
}else{
    targets = targets.split(',');
}...
...More code and references to elements following...

上記のコードは、上記で設定した値に関連する処理を行う前にコードが中断された (つまり、待機している) 場合にのみ機能します。それを行うために何かを配置できると思いますが、可能であればより効率的なソリューションを使用することをお勧めします。

(参考のため:)

background.js
=============
chrome.extension.onRequest.addListener(
function(request, sender, sendResponse) {
    switch (request.greeting){
        case "elements":
                var elements = localStorage["elements"];
                sendResponse({input: elements});
                break;
        case "properties":
                var properties = localStorage["properties"];
                sendResponse({input: properties});
                break;
        case "targets":
                var targets = localStorage["targets"];
                sendResponse({input: targets});
                break;
        }
  });

私はこれに3時間取り組んでいます(まだJSで何をしているのかを学んでいます)

4

1 に答える 1

0

うーん、それはできません:

chrome.extension.sendRequest({greeting: "properties"}, function(response) {
    properties = response.input;
});
if (properties == undefined){ // always undefined
    var properties = ["alt","id","class"];
}else{
    properties = properties.split(',');
}

sendRequest非同期です。

undefined をチェックする正しい方法は次のとおりです。

if (typeof properties == "undefined") 

そのすべてが必要な場合は、1 つのリクエストを作成し、コールバック内ですべてのことを行います。

chrome.extension.sendRequest({greeting: "all"}, function(response) {
    if (response.elements === null) {
        var elements = ["a","img"];
    } else {
        var elements = response.elements.split(',');
    }

    if (response.properties === null) {
        var properties = ["alt","id","class"];
    } else {
        var properties = response.properties.split(',');
    }

    if (response.targets === null) {
        var targets = ["onclick","href"];
    } else {
        var targets = response.targets.split(',');
    }
});

そしてバックグラウンドで:

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    switch (request.greeting){
        case "all":
            sendResponse({
                elements: localStorage.getItem("targets"),
                properties: localStorage.getItem("properties"),
                targets: localStorage.getItem("targets")
            });
            break;
    }
});
于 2012-04-18T15:38:27.697 に答える