Javascript webNavigation.onDOMContentLoaded URL筛选器与DNS错误URL不匹配

Javascript webNavigation.onDOMContentLoaded URL筛选器与DNS错误URL不匹配,javascript,firefox-addon,firefox-addon-webextensions,Javascript,Firefox Addon,Firefox Addon Webextensions,参考我上一个问题的答案。简而言之:当导航webRequest中发生错误(例如DNS查找错误)时,选项卡导航到的URL可在webNavigation.onDOMContentLoaded事件的URL属性中找到,用于导航到显示的错误页面,但实际URL会显示出来(即,about:neterrorURL)无法通过其他方式获得 我想按照答案的方法获取错误页面URL。我编写了以下示例代码,在浏览器中收到错误页面,但当我使用webNavigation时。onDOMContentLoaded要获取错误的实际UR

参考我上一个问题的答案。简而言之:当导航
webRequest
中发生错误(例如DNS查找错误)时,选项卡导航到的URL可在
webNavigation.onDOMContentLoaded
事件的
URL
属性中找到,用于导航到显示的错误页面,但实际URL会显示出来(即,
about:neterror
URL)无法通过其他方式获得

我想按照答案的方法获取错误页面URL。我编写了以下示例代码,在浏览器中收到错误页面,但当我使用
webNavigation时。onDOMContentLoaded
要获取错误的实际URL,代码根本不返回任何内容。请注意,如果没有错误,代码将返回正确的URL

下面是我的示例(test.js):

以及manifest.json

{
“清单版本”:2,
“名称”:“测试”
“版本”:“1.0”,
“背景”:{
“脚本”:[“test.js”]
},
“权限”:[
"",
“活动标签”,
“标签”,
“存储”,
“网络请求”,
“网络导航”
] 
}

您的代码无法按您希望的方式工作,因为您正在查找的URL不包含作为主机一部分的
pagedoesnotexist.com
。发生错误的URL是主机的一部分,而不是主机的一部分

不幸的是,使用键
queryContains
似乎有错误(我仍在研究我看到的行为)。我发现对代码的以下修改是有效的:

var errorDomain='pagedoesnotexist.com';
变量过滤器={
网址:
[
//{urlpeffix:'about:neterror'}//有效
//以下URL匹配中的简单正则表达式具有
//在匹配时产生误报的可能性
//域。换句话说,其他一些错误URL可能匹配
//但是,一个更复杂的RegExp
//防止此类假阳性匹配取决于
//您希望用于匹配的确切标准。对于
//实例,是否要匹配子域?仅HTTP?
//HTTP和HTTPS?任何协议(如FTP)?
{urlMatches:'^about:neterror\\?.*+errorDomain+'.*}//有效。
//{urlMatches:'.*pagedoesnotexist.com.*'}//有效
//{urlMatches:'.*page.*'}//有效
//{queryContains:'pagedoesnotexist.com'}//不起作用(可能是Firefox错误)
//{queryContains:'page'}//不工作(可能是Firefox错误)
]
}
函数logOnDOMContentLoaded(详细信息){
log(“onDOMContentLoaded:+details.url”);
}
browser.webNavigation.onDOMContentLoaded.addListener(logOnDOMContentLoaded,filter);
var filter = {
  url:
  [
    {hostContains: "pagedoesnotexist.com"}
  ]
}

function logOnDOMContentLoaded(details) {
  console.log("onDOMContentLoaded: " + details.url);
}

browser.webNavigation.onDOMContentLoaded.addListener(logOnDOMContentLoaded, filter);
{
  "manifest_version": 2,
  "name": "test
  "version": "1.0",
  "background": {
    "scripts": ["test.js"]
  },
  "permissions": [
    "<all_urls>",
    "activeTab",
    "tabs",
    "storage",
    "webRequest",
    "webNavigation"
  ] 
}