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

时间:2015-02-07 15:12:24

标签: javascript google-chrome redirect google-chrome-extension

我正在尝试创建一个执行某些代码的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"]);

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

1 个答案:

答案 0 :(得分:2)

您不能从异步代码中return

如果确实返回阻止响应,则必须同步返回; Chrome不会等待,您也不会收到异步调用的回调。

  

如果可选的opt_extraInfoSpec数组包含字符串' blocking' (仅允许特定事件),同步处理回调函数。这意味着请求被阻止,直到回调函数返回

E.g。如果您的代码需要4秒钟才能完成但是同步,您可以从中返回值并执行此操作:

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

但是您无法进行异步通话并让Chrome等待它。

Messaging比较:你得到一个可以异步调用的回调sendResponse。但不是在这里。