我有一个测试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);
答案 0 :(得分:1)
如果您尝试访问不存在的域,则会显示一个带有data:
网址的Chrome内部错误页面。
对于<all_urls>
,这不是甚至的有效匹配,因此您永远不会注入此类网页。
如果您需要捕获导航失败,可以通过背景页面中的webNavigation
或webRequest
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"]
);