修改Chrome扩展程序中的网址位置&停止初始请求

时间:2011-09-12 11:28:40

标签: google-chrome google-chrome-extension

我做了一个扩展,其目的是重定向网址。 即:www.google.com成为:www.mysite.com/?url=www.google.com

我遇到过这篇文章: How to modify current url location in chrome via extensions

我遇到的问题是网址都被处理了。该标签最初会加载google.com,并且只有在完成后才会显示我的请求(www.mysite.com/?url=www.google.com)。 有没有办法阻止初始请求被处理?

类似的东西:

   chrome.tabs.onUpdated.addListener(function(tabId,obj,tab){
    update.stop() // ??????????? Here I'm missing...
    chrome.tabs.update(tabId,{url:....}, function callback); // My update stuff..
   });

思想?

谢谢大家。

2 个答案:

答案 0 :(得分:7)

您正在寻找webNavigation API

您可以通过动态修改或阻止请求来注册侦听器以处理用户导航。

在下面的示例中,当用户导航到www.google.com时,在页面甚至开始加载onBeforeNavigate之前会被触发,您可以将用户重定向到该URL的CSS验证页面:

chrome.webNavigation.onBeforeNavigate.addListener((details) => {
    if(details.url.indexOf("www.google.com") !== -1)) {
        chrome.tabs.update(details.tabId, {
            url: "https://jigsaw.w3.org/css-validator/validator?uri=" + details.url
        });
    }
});

请务必在扩展程序清单中添加“webNavigation”权限,以启用此功能。

答案 1 :(得分:0)

chrome.tabs.onUpdated每个标签加载会被触发两次 - 一旦标签开始加载,另一次加载完成时。如果您将更新附加到选项卡开始加载事件,那么它应该相对快速地工作。您仍会看到原始网址被加载了一小段时间,但它不会等到它完成后,正如您所描述的那样。

chrome.tabs.onUpdated.addListener(function(tabId,obj,tab){
    if(obj.status == "loading") {
        chrome.tabs.update(tabId,{url:....}, function callback); 
    }
});

我认为目前没有更有效的解决方案。