我做了一个扩展,其目的是重定向网址。 即: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..
});
思想?
谢谢大家。
答案 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);
}
});
我认为目前没有更有效的解决方案。