如何重定向一些页面在谷歌chrome扩展
How to redirect some pages in Google chrome extension?
我在后台脚本中使用chrome.webRequest.onBeforeRequest
来监听用户正在制作的所有请求。我的扩展现在只是一个清单和这个bg脚本。
然后检查url是否匹配正则表达式:
chrome.webRequest.onBeforeRequest.addListener(
checkRedirect, {urls: ["<all_urls>"]}, ["blocking"]
);
function checkRedirect(details) {
var location = getLocation(details.url);
if(/some_regex/.test(details.url)) {
var redirect_url = 'http://some_redirect.com' + location.pathname;
chrome.tabs.update({url: redirect_url});
}
return {cancel: false};
}
function getLocation(href) {
var l = document.createElement('a');
l.href = href;
return l;
};
所以如果一个用户进入一个页面或点击到那个页面的链接,我想重定向他。上面的代码几乎可以正常工作;问题是当页面请求例如CSS,然后这些CSS最终在用户屏幕上。
所以我想要的是只过滤请求到页面/点击..如何做到这一点?
通过将types
设置为['main_frame']
来限制事件通知到顶级帧(如果您还想包含帧,请使用['main_frame', 'sub_frame']
)。
虽然前面的建议将解决你的问题,我建议更进一步,摆脱chrome.tabs.update
。使用redirectUrl
将先前的请求替换为重定向到所需的URL。
如果你的url模式匹配方法非常简单,可以用匹配模式来表达,那就把过滤器合并到webRequest API过滤器的"urls"关键字中。这将减少你的扩展对浏览器性能的影响。
chrome.webRequest.onBeforeRequest.addListener(function(details) {
var location = getLocation(details.url); // getLocation defined in question
var redirect_url = 'http://some_redirect.com' + location.pathname;
return { redirectUrl: redirect_url };
}, {
types: ['main_frame', 'sub_frame'],
urls: ['*://*/*some_pattern*']
}, ['blocking']);
注意:如果您不准备处理非http请求,请不要使用<all_urls>
相关文章:
- .scroll()函数在上次更新后在谷歌chrome中定位闪烁
- 如何让JS脚本在导航后继续运行(谷歌chrome控制台)
- 如何知道你右键点击谷歌chrome扩展是什么
- 对齐底部的DIV-谷歌Chrome扩展
- 当我用ctrl+p搜索时,为什么要在谷歌chrome上使用inspect来调试缺少显示文件js
- 从谷歌chrome中的任何网页获取所有tel标签
- 如何缩小我的谷歌chrome扩展's的javascript文件
- 当页面加载时,使谷歌chrome浏览器成为全屏浏览器
- 谷歌Chrome元素仍然存在:即使从光标移开,也要悬停
- 谷歌Chrome Chrome.usb/Chrome.hid锁定设备
- 我的jquery代码在谷歌chrome控制台中工作,而不是在保存它之后
- 谷歌Chrome扩展在用Javascript打开的弹出窗口中工作吗
- 基本的谷歌chrome扩展消息传递不起作用
- 如何操作谷歌chrome's PRINT选项
- 谷歌Chrome在范围滑块禁用时卡住了's的更改功能
- 谷歌Chrome日期选择器事件
- 如何允许在谷歌chrome中通过触摸屏放大和缩小iframe
- 谷歌chrome和FPS的奇怪行为
- 点击时禁用提交按钮,将阻止表单在谷歌Chrome上提交
- AngularJS-谷歌Chrome扩展中的动态链接断开