检测chrome.extension.sendRequest的失败

时间:2012-04-10 02:39:08

标签: javascript google-chrome google-chrome-extension

嘿同事Chrome Devs,如果chrome.extension.sendRequest失败了,怎么会检测?我试过这个,没有骰子:

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

但接下来发生的事情就是回调甚至不会发生,这正是我预期的一半。有没有办法检测sendRequest何时失败?

谢谢!

2 个答案:

答案 0 :(得分:0)

你需要改变....

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

...到......

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

正如文档所说的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

答案 1 :(得分:0)

你可以用try{}catch(err){}包围它来捕获任何抛出的错误,但是如果没有响应则不会抛出错误,并且也没有空响应。

这可以通过设计完成,以允许消息接收者做到这一点。例如,它可能涉及一些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!');
});