5

我想编写一个扩展程序,将所有网络流量重定向到特定域,比如 wikipedia.org,到一个中间页面,上面写着“哇,小伙子。你即将去维基百科。你确定对这个?” 其次是YesNo按钮。

当满足成为域中带有“wikipedia.org”的页面的条件时,如何响应特定的 URL 请求并用自定义页面替换所需的页面?

4

2 回答 2

10

您可以使用webRequest功能、背景页面和带有yesno按钮的自定义页面来执行此操作。比如在后台页面写类似的东西:

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”。

于 2012-11-26T19:04:02.123 回答
-2

您可以创建一个内容脚本,将 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/

于 2012-11-26T18:56:28.683 回答