2012-04-10 5 views
1

Hey Kollegen von Chrome Devs, wie würde man herausfinden, wenn ein chrome.extension.sendRequest ausgefallen ist? Ich habe versucht, diese und keine Würfel:Detect fail von chrome.extension.sendRequest

chrome.extension.sendRequest({ /* message stuff here */ }, function(req){ 
    if(req == null || chrome.extension.lastError == null){ 
     alert("No response. :("); 
    } 
}); 

Aber was passiert, ist, dass der Rückruf nicht einmal Feuer, das ist das, was ich die Hälfte erwartet. Gibt es eine Möglichkeit zu erkennen, wenn ein sendRequest fehlschlägt?

Danke!

+0

Wie konnte 'chrome.extension.sendRequest' fehlschlagen? Vielleicht sollten Sie versuchen, versuchen Sie {} catch() {} '. –

+1

@Derek könnte fehlschlagen, weil die Registerkarte zum Empfangen der Anforderung abgestürzt ist, vom Benutzer geschlossen wurde oder das Ereignis aus irgendeinem Grund nicht registriert wurde oder es überhaupt nicht registriert wurde. –

Antwort

0

Sie ändern müssen ....

if(req == null || chrome.extension.lastError == null){ 
    alert("No response. :("); 
} 

... zu ....

if(req == null){ 
    alert("No response. :(and the error was "+chrome.extension.lastError.message); 
} 

Da die docs sagen für sendeanfrage If an error occurs while connecting to the extension, the callback will be called with no arguments and chrome.extension.lastError will be set to the error message.
http://code.google.com/chrome/extensions/extension.html#method-sendRequest
http://code.google.com/chrome/extensions/extension.html#property-lastError

0

Sie könnten es mit einem try{}catch(err){} t umgeben o Fangen Sie alle ausgegebenen Fehler ab, aber es wird kein Fehler ausgegeben, wenn keine Antwort vorliegt und es auch keine Nullantwort gibt.

Dies wäre von Entwurf getan worden, damit ein Nachrichtenempfänger es tun kann. Zum Beispiel könnte es ein paar Web-Service-Anfragen oder Ajax-Anfragen, die eine Weile dauern könnten.

Wenn Sie wissen, wie es sollte lange reagieren nehmen Sie eine Timeout implementieren sollte (es wäre schön gewesen, wenn die sendrequest Funktion eines im Lieferumfang enthalten)

So

, Sie so etwas tun könnte:

var noResponse = setTimeout(100, function() { 
    alert('No response received within 100ms!'); 
}); 

chrome.extension.sendRequest({ /* message stuff here */ }, function(req){ 
    clearTimeout(noResponse); 
    alert('I have a response!'); 
}); 
+0

Ich werde wahrscheinlich am Ende diese Lösung verwenden, aber ich weiß wirklich nicht, wie lange es dauern wird, bis es antwortet ...: / – mattsven