繁体   English   中英

执行了耗时4/5秒的代码后,Chrome扩展程序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

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

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

例如,如果您的代码花了4秒钟完成但是同步的,则可以从中返回值并执行以下操作:

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

但是您不能进行异步调用,而让Chrome等待它。

Messaging进行比较:那里有一个回调sendResponse ,可以潜在地异步调用。 但是不在这里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM