【问题标题】:Modify url location in chrome extensions & stop the initial request修改 chrome 扩展中的 url 位置并停止初始请求
【发布时间】:2011-11-15 06:34:43
【问题描述】:

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

我看到了这个帖子: How to modify current url location in chrome via extensions

我遇到的问题是 url 都被处理了。该选项卡最初会加载 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..
   });

想法?

谢谢大家。

【问题讨论】:

  • 你在使用内容脚本吗?
  • 嗯,还没有。我正在使用背景页面。
  • 哦,是的,当然。我不知道是什么进入了我的内心。是的,我认为这样做是不可能的,除非你也可以控制多功能框,据我所知,你不能。
  • 可以使用内容脚本来完成吗?
  • 你目前在做什么,是的。你想做什么,不,据我所知。我记得有类似 window.stop() 的东西。尝试在内容脚本中使用它;尽可能早地注入到页面中。 (不会有太大帮助,因为内容脚本通常会在页面上的大部分内容加载后很好地注入。)

标签: google-chrome google-chrome-extension


【解决方案1】:

您正在寻找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" 权限添加到您的扩展清单以启用此功能。

【讨论】:

  • 看起来很有希望。我害怕使用那个 API,因为它可能会改变。他们会有什么机会?尽管他们说不,我应该“依赖”他们吗?
  • 有时,某些 API 变得不再需要甚至毫无意义。例如,侧边栏 API,将在未来的版本中删除,因为您现在可以通过内容脚本制作自己的侧边栏。但我向您保证,webNavigation 是必须具备的,并且只会进行一些小改动。玩得开心。
  • 而不是重定向?可以直接屏蔽吗?
  • @Noitidart 是的,可以使用 webNavigation API 阻止请求。我认为许多广告拦截器都使用它。你可以看看uBlock Origin 是开源的,看看他们是怎么做的。
  • 谢谢@snolflake 我会看看
【解决方案2】:

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

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

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

【讨论】:

  • 不应该是function callback(){}吗?
猜你喜欢
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
  • 2014-03-09
  • 1970-01-01
相关资源
最近更新 更多