2016-07-27 10 views
0

誰かが私になぜ出力が "x is:0 y is:undefined"と説明できるでしょうか?Chrome拡張コールバックで2つの値が渡され、1つは未定義です。

browseraction.js

chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
    chrome.tabs.sendMessage(tabs[0].id, {msg: "test"}, function(x,y){ 
    document.getElementById("status").innerHTML = "x is: " + x + " y is: " + y; 
    }); 
}); 

contentscript.js

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse){ 
    if(request.msg == "test"){ 
     sendResponse(0,0); 
    } 
}); 
+0

正常に機能していますか? – Nucktrooper

答えて

0

それが動作しない理由を知っているが、これはすべきでは機能しないでください:

browseraction.js

chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
    chrome.tabs.sendMessage(tabs[0].id, {msg: "test"}, function(resp){ 
    document.getElementById("status").textContent = "x is: " + resp.x + " y is: " + resp.y; 
    }); 
}); 

co ntentscript.js

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse){ 
    if(request.msg == "test"){ 
     sendResponse({x: 0, y: 0}); 
    } 
}); 

innerContextではなくtextContentを使用してください。

0

responseCallbacksendResponse関数で

によれば、JSONレスポンスオブジェクトである唯一のパラメータが存在します。これは、コールバックでyにアクセスする際、あなたがundefinedを得る理由です、(私は推測)

sendResponseを呼び出し、我々はJavaScriptで知っているように、提供されていない引数はundefinedになると、余分なパラメータは廃棄されます可能性がありますchrome.tabs.sendMessage

関連する問題