我正在尝试创建一个执行某些代码的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"]);
是否超时?有解决方法吗?
答案 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
。但不是在这里。