我想编写一个扩展程序,将所有网络流量重定向到特定域,比如 wikipedia.org,到一个中间页面,上面写着“哇,小伙子。你即将去维基百科。你确定对这个?” 其次是Yes和No按钮。
当满足成为域中带有“wikipedia.org”的页面的条件时,如何响应特定的 URL 请求并用自定义页面替换所需的页面?
我想编写一个扩展程序,将所有网络流量重定向到特定域,比如 wikipedia.org,到一个中间页面,上面写着“哇,小伙子。你即将去维基百科。你确定对这个?” 其次是Yes和No按钮。
当满足成为域中带有“wikipedia.org”的页面的条件时,如何响应特定的 URL 请求并用自定义页面替换所需的页面?
您可以使用webRequest
功能、背景页面和带有yes和no按钮的自定义页面来执行此操作。比如在后台页面写类似的东西:
var URLStorage;
function interceptRequest(request)
{
if(request && request.url)
{
if(request.type == "main_frame") // new page/site is loading in main window
{
if(request.url.indexOf("wikipedia.org") > -1)
{
URLStorage = request.url;
return {redirectUrl: chrome.extension.getURL("confirmation.html")};
}
}
}
}
chrome.webRequest.onBeforeRequest.addListener(interceptRequest, {urls: ["*://*/*"]}, ['blocking']);
这个例子并没有严格检查域中是否提到了维基百科,但为了清楚起见,我这样做了。在我的真实代码中,使用了一个特殊的“URL”类,它解析传递的 url 并为它的每个部分提供属性,因此可以有选择地检查它们。
只需放置 2 个按钮,并将confirmation.html
它们绑定到适当的代码,例如,如果用户回答“是”,则重定向到请求的站点。
$('#okbutton').click(function()
{
document.location.href = chrome.extension.getBackgroundPage().URLStorage;
});
不要忘记在permissions
清单部分提及“webRequest”和“webRequestBlocking”。
您可以创建一个内容脚本,将 javascript 代码注入用户访问的每个页面。在您的内容脚本中,您可以让 js 针对无效 url 检查当前 url 并相应地重定向它们。
我认为内容脚本在页面加载后加载,因此用户可能会在短时间内看到他们正在寻找的页面,然后被重定向到您的登录页面。在此处查看内容脚本文档:http: //developer.chrome.com/extensions/content_scripts.html
{
"name": "My extension",
...
"content_scripts": [
{
"matches": ["http://www.google.com/*"],
"css": ["mystyles.css"],
"js": ["jquery.js", "myscript.js"]
}
],
...
}
“匹配”你应该使数组类似于
"matches": ["http://www.*.com/*", "http://*.com/*, "https://www.*.com/*", "https://*.*.com/*]
并且“js”将是您要用于将注入写入页面的 javascript 文件的名称。
就像是:
if(window.location == "http://wikipedia.com"){
window.location.href = "http://mysplashpage.com";
}
当然,该 js 并非在所有情况下都有效,例如,如果用户试图访问目标网站的目录。您可能需要一些正则表达式检查或其他一些功能,如此处定义的协议和主机:http: //css-tricks.com/snippets/javascript/get-url-and-url-parts-in-javascript/