在打开与站点的连接之前执行chrome扩展功能?

时间:2012-12-27 06:34:40

标签: javascript google-chrome google-chrome-extension

这是我第一次接触任何类型的客户端网页编程语言,而且,我正试图制作我的第一个chrome插件。基本上我想做的是编码重定向的东西: -

ABC.com/ID

A.ABC.com/ID

到目前为止,我已将其全部编码,但是,它的作用是加载ABC.com/ID,等待它完成,然后注入我的内容脚本并重新加载A.ABC.com/ID。这显然是浪费时间。有没有什么方法可以告诉chrome在DNS查找之前加载这个脚本(因为它没用,因为它在新的子域上),或者,在打开到站点的连接之前(因为这不是页面我们是寻找)?我理解内容脚本可能不是最好的主意,如果不是,那会是什么?

1 个答案:

答案 0 :(得分:1)

是的,您可以使用web request API来实现,而无需任何内容脚本。以下演示文件会屏蔽所有Facebook网址,并将其重定向至Google,同样使用ABC.com/ID代替Facebook并使用A.ABC.com/ID代替Google这个用例。

参考

manifest.json

确保所有权限均可用,并注册带扩展名的后台页面。

{
  "name": "Hanlder for Navigation",
  "description": "http://stackoverflow.com/questions/14050467",
  "version": "1",
  "manifest_version": 2,
  "background": {
    "scripts": ["background.js"]
  },
  "permissions":["https://www.facebook.com/*","webRequest","webRequestBlocking"]
}

background.js

此代码会阻止对Facebook的所有网址请求,并将其重定向到Google

// Register an event listener which 
//traces all requests before being fired
chrome.webRequest.onBeforeRequest.addListener(function (details) {
    return {
        redirectUrl: "http://www.google.co.in/" /*Redirection URL*/
    };
}, {
    urls: ["*://www.facebook.com/*"] /* List of URL's */
}, ["blocking"]); // Block intercepted requests until this handler has finished

Output

Facebook的所有请求都会重定向到Google