当ERR_NAME_NOT_RESOLVED时加载content_script.js

时间:2017-10-03 10:23:11

标签: javascript google-chrome-extension

我有一个测试Chrome扩展程序,可在<all_urls>上运行。 它运行一个只写域的content_script。

除非我编写不存在的域名,否则它在所有情况下都能正常工作。

扩展的目的是在特定域上运行,无论它发生了什么。因此,我想确保它在我点击ERR_NAME_NOT_RESOLVED时运行。

关于如何实现它的任何想法?

的manifest.json

{
  "manifest_version": 2,

  "name": "Test",
  "version": "1.0",

  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["content_script.js"]
    }
  ],

  "permissions": [
    "<all_urls>"
  ]

}

content_script.js

window.console.log(window.document.location.hostname);

2 个答案:

答案 0 :(得分:1)

如果您尝试访问不存在的域,则会显示一个带有data:网址的Chrome内部错误页面。

对于<all_urls>,这不是甚至的有效匹配,因此您永远不会注入此类网页。

如果您需要捕获导航失败,可以通过背景页面中的webNavigationwebRequest API执行此操作;但您将无法修改错误页面。

答案 1 :(得分:1)

找到答案:

虽然无法使用content_script,但您可以使用webRequest与请求进行互动并对其进行更改。这满足了我的需求。

Chrome Developer documentation上有一些例子。否则,这是我的新代码:

的manifest.json

{
  "manifest_version": 2,

  "name": "Lazy ShortCuts",
  "version": "1.0",

  "background": {
    "scripts": ["background.js"]
  },

  "permissions": [
    "<all_urls>",
    "webRequest",
    "webRequestBlocking",
  ]

}

background.js

chrome.webRequest.onBeforeRequest.addListener(
  function(info) {
    console.log("Data intercepted: ", info);
    return {redirectUrl: 'https://google.com'};
  },
  {
    urls: [
      "<all_urls>",
    ]
  },
  ["blocking"]
);