chrome 插件 页面请求转发_关于javascript:收到响应后,使用Chrome webRequest进行URL转发...

这篇博客探讨了如何创建一个Chrome扩展,利用webRequest模块的onHeadersReceived事件来提取HTTP响应中的辅助URL,并进行重定向。由于onHeadersReceived不支持直接重定向,作者建议存储辅助URL并使用chrome.tabs.reload()触发onBeforeRequest事件来实现重定向。示例代码展示了如何阻止Facebook请求并重定向到Google,但存在重新加载整个选项卡的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

用户在地址栏中输入URL

发出请求并从HTTP响应中提取辅助URL

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模块接收的数据执行这种转发?

已通过code.google.com/p/chromium/issues/detail?id=280464请求了onHeadersReceived中的redirectUrl。 请为问题加注星标!

Web请求API方法

onBeforeRequest允许取消或重定向请求

onBeforeSendHeaders,onHeadersReceived允许取消请求或修改标头

onAuthRequired允许提供修改身份验证凭据。

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

样品示范

以下未经测试的:)演示会阻止所有Facebook URL,并在收到辅助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。

此方法有一点缺陷,因为它会为所有请求(包括框架和图像/样式表/脚本/ ...中的请求)重新加载整个选项卡。

是的,可以通过在tabs.reload()方法上设置从回调传递的tabID来稍作改进。

我只是尝试了此示例,但无法将其重定向。 我在控制台中看不到任何错误。 我有什么想念的吗?

很好奇,您不能从onHeadersReceived return { redirectUrl:"http:www.google.co.in" *Redirection URL* };而不是强制执行tab.reload吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值