我正在尝试创建一个Chrome扩展程序,该扩展利用Chrome的webRequest模块执行重定向到从最初访问的网址获取的网址。为此,我想仅使用Chrome的webRequest函数(例如onBeforeSendHeaders,onHeadersReceived)而不是简单地使用获得的URL执行对$ .ajax()的调用。所需的功能是:
我完成此任务的尝试是:
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模块收到的数据执行此类转发?
答案 0 :(得分:4)
因此,想法是存储来自onHeadersReceived Event的辅助URL并触发chrome.tabs.reload()
事件,该事件再次触发onBeforeRequest事件,这有助于重定向。
以下未经测试的:)演示会阻止所有Facebook
网址,并在收到辅助网址时将其重定向至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
此代码会阻止对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