我正在针对个人情况(网站自动化)开发一款小型的Chrome扩展程序供个人使用,但我遇到了问题。如何在后台脚本上捕获网络错误并调用某个函数。

我已经实现了这种方法:

chrome.webRequest.onErrorOccurred.addListener(
  handleNetworkError,
  {urls: ["http://*/*", "https://*/*"]
});

从我看到的男子汉::net错误,DNS失败,网络更改等方面,它捕获了一些网络错误。

但是今天我注意到HTTP错误,例如:

GET https://example.com 522 (Origin Connection Time-out)

没有触发监听器,我该如何使它们也起作用?

最佳答案

在用户@Xan的帮助下,我设法解决了这个问题:

function extractStatus(line) {
    var match = line.match(/[^ ]* (\d{3}) (.*)/);
    if (match)
        return {code: match[1], message: match[2]};
    else
        return undefined;
}

chrome.tabs.query({active: true, lastFocusedWindow: true }, function(tabsArray) {
    tab = tabsArray[0];
    scope = {urls: ["https://example.com/*"], tabId: tab.id};
    console.log("Listening for errors...");

    // ::net errors
    chrome.webRequest.onErrorOccurred.addListener(handleNetworkError, scope);

    // HTTP errors
    chrome.webRequest.onHeadersReceived.addListener(function(details) {

        var status = extractStatus(details.statusLine);
        if (!status)
            return;

        if (status.code.charAt(0) == '5' || status.code.charAt(0) == '4')
            handleNetworkError();

    }, scope);
});

关于javascript - Chrome扩展程序: Background Script Catch Network and HTTP Errors,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28106097/

10-12 07:12