如何重定向一些页面在谷歌chrome扩展

How to redirect some pages in Google chrome extension?

本文关键字:谷歌 chrome 扩展 重定向      更新时间:2023-09-26

我在后台脚本中使用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>