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
。但这里没有。
我正在尝试创建一个 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
。但这里没有。