2016-07-27 23 views
0

Kann mir jemand erklären, warum die Ausgabe ist: "x ist: 0 y ist: undefiniert" ??Chrome-Erweiterung Callback übergibt zwei Werte und einer zeigt nicht definiert?

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

Hat es funktioniert oder nicht? – Nucktrooper

Antwort

0

Sie wissen nicht, warum es nicht funktioniert, aber dies sollte Werke:

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}); 
    } 
}); 

Sie sollten textContent und nicht innerHTML verwenden.

0

Nach

im responseCallback und sendResponse Funktion, gibt es nur einen Parameter, der die json Antwortobjekt ist. Es ist wahrscheinlich die zusätzlichen Parameter würde fallen gelassen werden, wenn sendResponse Aufruf (ich glaube)

Und wie wir in JavaScript wissen, Argumente, die würden undefined nicht zur Verfügung gestellt werden wird, das ist, warum Sie undefined erhalten, wenn zu y in der Callback-Zugriff von chrome.tabs.sendMessage.