0

如何在清单版本 3 的扩展中获取任何网络请求的错误详细信息?我需要从选项卡或获取请求中获取错误详细信息(net:ERR 或状态码等错误)

我在清单版本 2 中是如何做到的:

如何从获取请求中获取 net:ERR 错误:

我们 100% 得到错误 ERR_NAME_NOT_RESOLVED 的不存在的站点

_fetch('https://dsdsdf.asdafgfsa.net/', {})

let fetchRequests = []
async function _fetch(url, options) {
    let listener
    const removeListener = ()=>{
        if (listener) {
            chrome.webRequest.onBeforeRequest.removeListener(listener)
            listener = null
        }
    }

    listener = (details)=>{
        if (details.initiator == 'chrome-extension://' + chrome.runtime.id && details.url.includes(url)) {
            fetchRequests.push(details.requestId)
            removeListener()
        }
    }
    chrome.webRequest.onBeforeRequest.addListener(listener, {urls: ['<all_urls>']})

    try {
        const response = await fetch(url, options)
        return response
    } catch(e) {
        throw e
    } finally {
        removeListener()
    }
}

chrome.webRequest.onErrorOccurred.addListener(function(details) {
    if (details.initiator == 'chrome-extension://' + chrome.runtime.id) {
        if (fetchRequests.indexOf(details.requestId) != -1) {
            //Here we get the details of our error from the fetch request
            console.error(details.url, details.error)
        }
    } else if (details.type == 'main_frame') {
        //Here we get the details of our error from the tab
        console.error(details.url, details.error)
    }
}, {urls: ['<all_urls>']})

如何从选项卡中获取错误代码(状态代码):

chrome.webRequest.onCompleted.addListener(function(details) {
    if (details.type == 'main_frame' && (details.statusCode < 200 || details.statusCode > 299)) {
        console.error(details.url, details.statusCode)
    }
}, {urls: ['<all_urls>']})

以及如何在清单版本 3 上执行此操作?我查看了 declarativeNetRequest 但它不允许这样做。我没有找到可以提供此类错误详细信息的另一个 API(webNavigation 除外,但它没有提供有关获取请求错误的信息)

4

0 回答 0