如何使用chrome.webRequest API重定向URL?

Kae*_*eus 1 javascript google-chrome-extension

background.js:

chrome.webRequest.onBeforeRequest.addListener(function (details) {
    console.log(details.url);
    window.location.href = 'http://time.com/';
}, {urls: ['<all_urls>']}, []);
Run Code Online (Sandbox Code Playgroud)

当我访问网站时,它会在控制台中显示所有请求,但不会将网站重定向到time.com。

附加信息:

我在后台控制台上出现错误:

Error in event handler for webRequest.onHeadersReceived/1: ReferenceError: url is not defined at chrome.webRequest.onHeadersReceived.addListener.urls (chrome-extension://hkiajgmcjicgampfdeiiacbojlmdokob/background.js:5:8)
Run Code Online (Sandbox Code Playgroud)

那么...在这种情况下,有没有办法查看来自time.com的console.log请求?

我喜欢查看请求,不需要在Chrome窗口上重定向。我需要的只是请求在后台控制台中查看。

wOx*_*xOm 5

webRequest API提供了重定向功能。

在manifest.json中添加webRequestBlockingwebRequest和主机权限:

"permissions" : [
    "webRequest",
    "webRequestBlocking",
    "http://www.example.com/*" /* or <all_urls> */
]
Run Code Online (Sandbox Code Playgroud)

在侦听器中拦截要重定向的URL上的页面本身(main_frame)和iframe(sub_frame)的请求(应在上面显示的“权限”中声明这些URL)blocking

chrome.webRequest.onBeforeRequest.addListener(function(details) {
    console.log(details.url);
    if (!details.url.startsWith('http://time.com/')) {
        return {redirectUrl: 'http://time.com'};
    }
}, {
    urls: ['http://www.example.com/*'], // or <all_urls>
    types: ['main_frame', 'sub_frame'],
}, [
    'blocking'
]);
Run Code Online (Sandbox Code Playgroud)

要查看后台控制台,请在chrome:// extensions页面上将其打开

另外,请确保阅读文档中的扩展架构文章:后台页面是一个完全独立的页面,与网页无关,具有自己的上下文和自己的URL,例如chrome-extension://blablabla/background.html不能导航到另一个URL。