我的兴趣是仅在重载时间内处理网站以使自动填充工作。例如,当销售打开并且网站蜂拥时,它有时会崩溃。我需要捕获网站错误,因此我可以从后台脚本重新加载页面。 如Chrome Extensions: Background Script Catch Network and HTTP Errors中所述,我们可以解决页面加载错误。
网页加载错误可能是由于网络问题,网站问题,DNS问题以及网站过载问题造成的。
我想要的只是重新加载网页,以防由于某些错误而未加载。
我为Chrome和Firefox收集了许多错误代码:
这不是完整列表。我已经看到了这些错误,所以我已经列出了它们。我想知道(HTML)页面无法加载时所有错误代码的列表,而不是使用反复试验找到它们。
以下是我想要使用的示例源代码:
chrome.webRequest.onErrorOccurred.addListener(function (details)
{
if ("type" in details && ['main_frame', 'sub_frame'].indexOf(details.type) == -1)
{
if (details.url.match(/.js$/))
{
console.log("Error in download of this file:", details.url);
}
return;
}
if (details.tabId == -1)
{
return;
}
var check_all_errors = function(err)
{
var all_errors = [
"net::ERR_ABORTED",
"net::ERR_EMPTY_RESPONSE",
"net::ERR_CONNECTION_TIMED_OUT",
"net::ERR_CONNECTION_REFUSED",
"net::ERR_CONNECTION_RESET",
"NS_ERROR_NET_ON_CONNECTING_TO",
'NS_ERROR_NET_ON_WAITING_FOR',
'NS_ERROR_NET_ON_CONNECTING_TO'
];
for( var i=0;i<all_errors.length;++i)
{
if( all_errors[i] == err && !ff_validate_false())
{
return true;
}
}
console.log("786 returning false for err "+err);
return false;
}
if (details.url == HOME_URL && check_all_errors(details.error)) //if any error encountered then go to home URL
{
setTimeout(function () {
chrome.tabs.update(details.tabId, {url: HOME_URL});
}, 1000);
}
//FOLLOWING PART IS NOW SHOWN HERE
答案 0 :(得分:3)
对于error
property 中提供的MDN (details
object) ({{3} }) 传递给MDN (webRequest.onErrorOccurred
) 听众,强烈建议您不测试该属性的实际文本内容。
MDN说:
您不得根据其内容进行解析和行动。
"error": {"type": "string", "description": "The error description. This string is <em>not</em> guaranteed to remain backwards compatible between releases. You must not parse and act based upon its content."}
错误说明。不保证此字符串在版本之间保持向后兼容。 您不得根据其内容进行解析和行动。
您不得根据其内容进行解析和行动。
"error": {"type": "string", "description": "The error description. This string is <em>not</em> guaranteed to remain backwards compatible between releases. You must not parse and act based upon its content."}
错误说明。此字符串是内部错误字符串,可能因浏览器而异,并且不保证在不同版本之间保持相同。
error
值Chrome在documentation says(this file)中列出了可能的错误值。该代码是:
{ net::ERR_ABORTED, "aborted" },
{ net::ERR_TIMED_OUT, "tcp.connection.timed_out" },
{ net::ERR_CONNECTION_CLOSED, "tcp.connection.closed" },
{ net::ERR_CONNECTION_RESET, "tcp.connection.reset" },
{ net::ERR_CONNECTION_REFUSED, "tcp.connection.refused" },
{ net::ERR_CONNECTION_ABORTED, "tcp.connection.aborted" },
{ net::ERR_CONNECTION_FAILED, "tcp.connection.failed" },
{ net::ERR_NAME_NOT_RESOLVED, "dns" },
{ net::ERR_SSL_PROTOCOL_ERROR, "ssl.protocol.error" },
{ net::ERR_ADDRESS_INVALID, "tcp.connection.address_invalid" },
{ net::ERR_ADDRESS_UNREACHABLE, "tcp.connection.address_unreachable" },
{ net::ERR_CONNECTION_TIMED_OUT, "tcp.connection.timed_out" },
{ net::ERR_NAME_RESOLUTION_FAILED, "dns" },
{ net::ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN,
"ssl.cert.pinned_key_not_in_cert_chain" },
{ net::ERR_CERT_COMMON_NAME_INVALID, "ssl.cert.name_invalid" },
{ net::ERR_CERT_DATE_INVALID, "ssl.cert.date_invalid" },
{ net::ERR_CERT_AUTHORITY_INVALID, "ssl.cert.authority_invalid" },
{ net::ERR_CERT_REVOKED, "ssl.cert.revoked" },
{ net::ERR_CERT_INVALID, "ssl.cert.invalid" },
{ net::ERR_EMPTY_RESPONSE, "http.response.empty" },
{ net::ERR_SPDY_PING_FAILED, "spdy.ping_failed" },
{ net::ERR_SPDY_PROTOCOL_ERROR, "spdy.protocol" },
{ net::ERR_QUIC_PROTOCOL_ERROR, "quic.protocol" },
{ net::ERR_DNS_MALFORMED_RESPONSE, "dns.protocol" },
{ net::ERR_DNS_SERVER_FAILED, "dns.server" },
{ net::ERR_DNS_TIMED_OUT, "dns.timed_out" },
{ net::ERR_INSECURE_RESPONSE, "ssl" },
{ net::ERR_CONTENT_LENGTH_MISMATCH, "http.response.content_length_mismatch" },
{ net::ERR_INCOMPLETE_CHUNKED_ENCODING,
"http.response.incomplete_chunked_encoding" },
{ net::ERR_SSL_VERSION_OR_CIPHER_MISMATCH,
"ssl.version_or_cipher_mismatch" },
{ net::ERR_BAD_SSL_CLIENT_AUTH_CERT, "ssl.bad_client_auth_cert" },
{ net::ERR_INVALID_CHUNKED_ENCODING,
"http.response.invalid_chunked_encoding" },
{ net::ERR_RESPONSE_HEADERS_TRUNCATED, "http.response.headers.truncated" },
{ net::ERR_REQUEST_RANGE_NOT_SATISFIABLE,
"http.request.range_not_satisfiable" },
{ net::ERR_INVALID_RESPONSE, "http.response.invalid" },
{ net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION,
"http.response.headers.multiple_content_disposition" },
{ net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH,
"http.response.headers.multiple_content_length" },
{ net::ERR_SSL_UNRECOGNIZED_NAME_ALERT, "ssl.unrecognized_name_alert" }
这意味着Chrome的可能值为:
net::ERR_ABORTED
net::ERR_TIMED_OUT
net::ERR_CONNECTION_CLOSED
net::ERR_CONNECTION_RESET
net::ERR_CONNECTION_REFUSED
net::ERR_CONNECTION_ABORTED
net::ERR_CONNECTION_FAILED
net::ERR_NAME_NOT_RESOLVED
net::ERR_SSL_PROTOCOL_ERROR
net::ERR_ADDRESS_INVALID
net::ERR_ADDRESS_UNREACHABLE
net::ERR_CONNECTION_TIMED_OUT
net::ERR_NAME_RESOLUTION_FAILED
net::ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN
net::ERR_CERT_COMMON_NAME_INVALID
net::ERR_CERT_DATE_INVALID
net::ERR_CERT_AUTHORITY_INVALID
net::ERR_CERT_REVOKED
net::ERR_CERT_INVALID
net::ERR_EMPTY_RESPONSE
net::ERR_SPDY_PING_FAILED
net::ERR_SPDY_PROTOCOL_ERROR
net::ERR_QUIC_PROTOCOL_ERROR
net::ERR_DNS_MALFORMED_RESPONSE
net::ERR_DNS_SERVER_FAILED
net::ERR_DNS_TIMED_OUT
net::ERR_INSECURE_RESPONSE
net::ERR_CONTENT_LENGTH_MISMATCH
net::ERR_INCOMPLETE_CHUNKED_ENCODING
net::ERR_SSL_VERSION_OR_CIPHER_MISMATCH
net::ERR_BAD_SSL_CLIENT_AUTH_CERT
net::ERR_INVALID_CHUNKED_ENCODING
net::ERR_RESPONSE_HEADERS_TRUNCATED
net::ERR_REQUEST_RANGE_NOT_SATISFIABLE
net::ERR_INVALID_RESPONSE
net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION
net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH
net::ERR_SSL_UNRECOGNIZED_NAME_ALERT
Firefox有点复杂。 WebExtensions是一种在Firefox使用的API之上分层的API(并公开给其他类型的附加组件)。 Firefox代码通过以下方式更改从底层API获取的错误文本响应:
let prefix = /^(?:ACTIVITY_SUBTYPE_|STATUS_)/;
let map = new Map();
for (let iface of [nsIHttpActivityObserver, nsISocketTransport]) {
for (let c of Object.keys(iface).filter(name => prefix.test(name))) {
map.set(iface[c], c.replace(prefix, "NS_ERROR_NET_ON_"));
}
}
可能的ACTIVITY_SUBTYPE_
属性的代码位于文件some associated code中,可能的STATUS_
属性的定义位于nsIHttpActivityObserver.idl。执行适当的RegEx替换会产生以下可能的值:
NS_ERROR_NET_ON_RESOLVING
NS_ERROR_NET_ON_RESOLVED
NS_ERROR_NET_ON_CONNECTING_TO
NS_ERROR_NET_ON_CONNECTED_TO
NS_ERROR_NET_ON_SENDING_TO
NS_ERROR_NET_ON_WAITING_FOR
NS_ERROR_NET_ON_RECEIVING_FROM
NS_ERROR_NET_ON_REQUEST_HEADER
NS_ERROR_NET_ON_REQUEST_BODY_SENT
NS_ERROR_NET_ON_RESPONSE_START
NS_ERROR_NET_ON_RESPONSE_HEADER
NS_ERROR_NET_ON_RESPONSE_COMPLETE
NS_ERROR_NET_ON_TRANSACTION_CLOSE