webRequest.onErrorOccurred
当请求因错误(如网络连接中断)而无法处理时触发此事件。
错误信息将通过 details 对象的 error 属性传递给监听器。
请注意,此事件不会因 HTTP 错误(4XX 或 5XX 响应)而触发:这类错误会正常经过请求处理流程,触发其他事件监听器,并通过设置 details.statusCode 来报告错误。
此事件仅用于提供信息。
语法
browser.webRequest.onErrorOccurred.addListener(
listener, // 函数
filter // 对象
)
browser.webRequest.onErrorOccurred.removeListener(listener)
browser.webRequest.onErrorOccurred.hasListener(listener)
事件有三个函数:
addListener(listener)-
为此事件添加监听器。
removeListener(listener)-
停止监听此事件。
listener参数是要移除的监听器。 hasListener(listener)-
检查是否已为此事件注册了
listener。若正在监听,返回true,否则返回false。
addListener 语法
>参数
listener-
当事件发生时调用的函数。该函数接收以下参数:
filter-
webRequest.RequestFilter。限制发送到此监听器的事件类型的过滤器。
附加对象
>details
-
string。若请求来自上下文身份中打开的标签页,则为此上下文身份的 cookie 存储 ID。参见使用上下文身份。 documentUrl-
string。资源所在的文档的 URL。例如,若页面“https://example.com”包含图像或 iframe,则该图像或 iframe 的documentUrl将为“https://example.com”。顶级文档的documentUrl为 undefined。 error-
string。错误描述。此字符串是内部错误字符串,可能因浏览器而异,且不保证版本间的一致性。 frameId-
integer。发生在主框架中的请求的该属性为 0;在子框架中的请求则为代表该子框架的 ID 的正数。对于(子)框架的文档加载请求(type为main_frame或sub_frame),则frameId表示此框架的 ID 而非外部框架的 ID。框架 ID 在标签页内唯一。 fromCache-
boolean。指示此响应是否从磁盘缓存获取。 incognito-
boolean。请求是否来自隐私浏览窗口。 ip-
string。请求的目标服务器的 IP 地址,可能是 IPv6 字面量。 method-
string。标准 HTTP 方法,例如“GET”或“POST”。 originUrl-
string。触发请求的资源的 URL。例如,若用户点击了“https://example.com”页面中的链接,则结果请求的originUrl为“https://example.com”。originUrl通常与documentUrl相同,但并不总是如此。例如,如果页面包含 iframe,并且 iframe 包含加载新文档的链接,则结果请求的documentUrl将是 iframe 的父文档 URL,而originUrl将是包含链接的 iframe 中的文档的 URL。 parentFrameId-
integer。包含发起请求的框架的父框架 ID。如果不存在父框架则为 -1。 proxyInfo-
object。仅当请求被代理时,此属性才存在。它包含以下属性:host-
string。代理服务器的主机名。 port-
integer。代理服务器的端口号。 type-
string。代理服务器的类型,以下值之一:"http":HTTP 代理(或使用 SSL CONNECT 的 HTTPS)"https":通过 TLS 连接到代理的 HTTP 代理"socks":SOCKS v5 代理"socks4":SOCKS v4 代理"direct":无代理"unknown":未知代理
username-
string。代理服务的用户名。 proxyDNS-
boolean。如果代理将根据提供的主机名执行域名解析,则为真,意味着客户端不应执行自己的 DNS 查找。 failoverTimeout-
integer。故障转移超时时间(秒)。如果代理连接失败,则在此期间内将不再使用代理。
requestId-
string。请求的 ID。请求 ID 在浏览器会话中唯一,因此可以使用它们来关联与同一请求相关的不同事件。 tabId-
integer。请求发生的标签页的 ID。如果请求与标签页无关,则为 -1。 thirdParty-
boolean。指示请求及其内容窗口层次结构是否为第三方。 timeStamp-
number。此事件触发时的时间,以自纪元以来的毫秒数表示。 type-
webRequest.ResourceType。正在请求的资源的类型,例如“image”、“script”、“stylesheet”。 url-
string。请求的目标 URL。 urlClassification-
object。与请求相关的跟踪类型(如果请求由 Firefox 跟踪保护分类)。包含以下属性的对象:firstParty-
string的数组(array)。请求的第一方的分类标志。 thirdParty-
string的数组(array)。请求或其窗口层次结构的第三方的分类标志。
分类标志包括:
fingerprinting和fingerprinting_content:请求涉及指纹识别(“发现指纹的来源”)。fingerprinting表示域名属于指纹识别和跟踪类别。示例包括广告商的域名关联用户画像与到访用户。fingerprinting_content表示域名仅属指纹识别类别。示例包括支付提供商的域名使用指纹识别技术用于识别到访用于反欺诈目的。
cryptomining和cryptomining_content:与指纹识别类别类似,但用于加密货币挖矿资源。tracking、tracking_ad、tracking_analytics、tracking_social和tracking_content:请求涉及跟踪。tracking表示通用跟踪,而ad、analytics、social和content后缀表示跟踪器的具体类型。emailtracking和emailtracking_content:请求涉及跟踪电子邮件。any_basic_tracking:元标志,组合跟踪和指纹识别标志(不含tracking_content和fingerprinting_content)。any_strict_tracking:元标志,组合所有跟踪和指纹识别标志。any_social_tracking:元标志,组合所有社交跟踪标志。
更多跟踪器类型详细信息,参见 disconnect.me 网站。
content后缀表示跟踪器同时提供内容服务,拦截这些跟踪器可以保护用户,但也可能会导致站点中断或元素无法显示。备注: 如果 Firefox 跟踪保护阻止请求,则返回一个空对象且
error包含以下状态码之一:NS_ERROR_MALWARE_URI表示恶意软件 URI。NS_ERROR_PHISHING_URI表示网络钓鱼 URI。NS_ERROR_TRACKING_URI表示跟踪 URI。NS_ERROR_UNWANTED_URI表示不需要的 URI。NS_ERROR_BLOCKED_URI表示被阻止的 URI。NS_ERROR_HARMFUL_URI表示有害 URI。NS_ERROR_FINGERPRINTING表示指纹识别 URI。NS_ERROR_CRYPTOMINING_URI表示加密货币挖矿 URI。NS_ERROR_SOCIALTRACKING_URI表示社交跟踪 URI。
浏览器兼容性
Loading…
示例
let target = "<all_urls>";
/*
例如没有网络连接时访问:
"https://big.rakal.top/zh-CN/"
在 Firefox 中为 NS_ERROR_NET_ON_RESOLVED
在 Chrome 中为 net::ERR_INTERNET_DISCONNECTED
*/
function logError(responseDetails) {
console.log(responseDetails.url);
console.log(responseDetails.error);
}
browser.webRequest.onErrorOccurred.addListener(logError, { urls: [target] });
示例扩展
备注:
此 API 基于 Chromium 的 chrome.webRequest API。该文档衍生自 Chromium 代码中的 web_request.json。