6

我正在尝试创建一个 Chrome 扩展,该扩展利用 Chrome 的webRequest模块执行重定向到从最初访问的 URL 获得的 URL。为此,我只想使用 Chrome 的 webRequest 函数(例如,onBeforeSendHeaders、onHeadersReceived),而不是简单地使用获得的 URL 调用 $.ajax()。所需的功能是:

  1. 用户在地址栏中输入 URL
  2. 发出请求并从 HTTP 响应中提取辅助 URL
  3. chrome.webRequest.onHeadersReceived处理程序使用阻止响应的 redirectUrl 属性将用户重定向到此辅助 URL

我的尝试是:

chrome.webRequest.onHeadersReceived.addListener(
 function(details){
  var secondaryURL = extractSecondaryURL(details);
  return {redirectUrl: secondaryURL}; //this doesn't work
 },
 {urls:["http://*/*", "https://*/*"]},
 ["blocking","responseHeaders"]
);

...但页面永远不会被转发。webRequest 文档说:“仅用作对 onBeforeRequest 事件的响应。” 关于redirectUrl属性,这可能是罪魁祸首。

如何使用从响应标头和 Chrome webRequest 模块接收到的数据执行这种转发?

4

1 回答 1

7

网络请求 API方法

因此,想法是存储来自 onHeadersReceived 事件的辅助 URL 并触发一个 chrome.tabs.reload()事件,该事件再次触发 onBeforeRequest 事件,这有助于重定向。

示例演示

以下未经测试的:) 演示会阻止所有FacebookURL,并在接收到辅助 URL 时将它们重定向到Google,您可以进一步对其进行自定义。

参考

manifest.json

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

{
  "name": "Hanlder for Navigation",
  "description": "http://stackoverflow.com/questions/16928912/url-forwarding-using-chrome-webrequest-after-response-is-received",
  "version": "1",
  "manifest_version": 2,
  "background": {
    "scripts": ["background.js"]
  },
  "permissions":["https://www.facebook.com/*","webRequest","webRequestBlocking","tabs"]
}

background.js

此代码阻止所有 URL 请求Facebook并将它们重定向到Google.

var _redirectURL = "";
// Register an event listener which 
//traces all requests before being fired
chrome.webRequest.onBeforeRequest.addListener(function (details) {
    if (_redirectURL != "") {
        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
chrome.webRequest.onHeadersReceived.addListener(function (details) {
    if (_redirectURL == "") {
        var secondaryURL = extractSecondaryURL(details);
        _redirectUrl = secondaryURL;
        chrome.tabs.reload();
    }
}, {
    urls: ["http://*/*", "https://*/*"]
}, ["blocking", "responseHeaders"]);

Output

所有请求Facebook都重定向到Google

于 2013-06-05T06:10:42.473 回答