1

仲間の Chrome 開発者の皆さん、achrome.extension.sendRequestが失敗したときにどのように検出しますか? 私はこれを試しましたが、サイコロはありません:

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

しかし、何が起こるかというと、コールバックが起動することさえありません。これは、私が半分期待していたことです。sendRequest が失敗したことを検出する方法はありますか?

ありがとう!

4

2 に答える 2

0

You need to change....

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

...to....

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

As the docs say for sendRequest 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

于 2012-04-10T10:25:57.967 に答える
0

スローされたエラーをキャッチするために で囲むこともできtry{}catch(err){}ますが、応答がない場合はエラーはスローされず、null 応答もありません。

これは、メッセージ受信者がそれを実行できるようにするために、設計上行われていました。たとえば、いくつかの Web サービス リクエストや、しばらく時間がかかる ajax リクエストが含まれる場合があります。

応答にかかる時間がわかっている場合は、タイムアウトを実装する必要があります (sendRequest 関数にタイムアウトが含まれていればよかったのに)。

したがって、次のようなことができます。

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!');
});
于 2012-04-10T11:06:55.207 に答える