Chrome 执行需要 4/5 秒的代码后扩展 webrequest 重定向

Chrome extension webrequest redirect after executing code that takes 4/5 seconds

我正在尝试创建一个 Chrome 扩展程序来执行一些代码(大约需要 4 秒),然后执行一个将用户重定向到页面的回调。但是,使用以下代码不会发生重定向:

 chrome.webRequest.onBeforeRequest.addListener(function(details) {
    functionThatTakes4Seconds(function(){
            return {
                redirectUrl: redirect
            };
    );
}, {
    urls: ["url.com"]
}, ["blocking"]);

当我不 运行 需要 4 秒的函数时,重定向有效:

 chrome.webRequest.onBeforeRequest.addListener(function(details) {
            return {
                redirectUrl: redirect
            };
}, {
    urls: ["url.com"]
}, ["blocking"]);

是否超时?有解决办法吗?

您不能从异步代码中 return

如果你return一个阻塞响应,它必须被同步return; Chrome 不会等待,您不会得到异步调用的回调。

If the optional opt_extraInfoSpec array contains the string 'blocking' (only allowed for specific events), the callback function is handled synchronously. That means that the request is blocked until the callback function returns.

例如如果您的代码需要 4 秒才能完成但是是同步的,您可以 return 它的值并执行此操作:

chrome.webRequest.onBeforeRequest.addListener(function(details) {
  return {
    redirectUrl: functionThatTakes4Seconds() // must return something
  };
}, {
    urls: ["url.com"]
}, ["blocking"]);

但是您不能执行异步调用并让 Chrome 等待它。

Messaging 相比:您会得到一个可以异步调用的回调 sendResponse。但这里没有。