我正在尝试创建一个 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"]);
是否超时?有解决方法吗?
最佳答案
您无法从异步代码返回
。
如果确实返回阻塞响应,则必须同步返回; 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 秒才能完成但是同步的,您可以从中返回值并执行以下操作:
chrome.webRequest.onBeforeRequest.addListener(function(details) {
return {
redirectUrl: functionThatTakes4Seconds() // must return something
};
}, {
urls: ["url.com"]
}, ["blocking"]);
但是您无法执行异步调用并让 Chrome 等待它。
与Messaging相比:在那里你会得到一个回调 sendResponse
,你可以异步调用它。但不在这里。
关于javascript - Chrome 扩展程序在执行需要 4/5 秒的代码后进行 Web 请求重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28383739/