我正在编写一个Google Chrome扩展程序。我使用setTimeout来减慢向服务器发送请求的速度。但是,setTimeout并没有按预期工作。它返回一个错误,说reqUrl未定义。
根据stackoverflow上类似问题的答案,这似乎是一个超出范围的问题,除了将reqUrl变成全局变量之外,我不知道如何解决它,但这似乎不是一个很好的解决方案。如果我删除括号,它就会失控,根本没有时间延迟。
如何让它正常工作?
以下是代码。尽管我认为slowdow函数不是问题的核心,但我还是包含了它。
根据stackoverflow上类似问题的答案,这似乎是一个超出范围的问题,除了将reqUrl变成全局变量之外,我不知道如何解决它,但这似乎不是一个很好的解决方案。如果我删除括号,它就会失控,根本没有时间延迟。
如何让它正常工作?
以下是代码。尽管我认为slowdow函数不是问题的核心,但我还是包含了它。
openDetailPg(profileLink[currentLink]);
function openDetailPg(reqUrl)
{
console.log('openDetailPg at '+reqUrl);
setTimeout("createDetailWindow(reqUrl)",slowDown());
++sendCount;
timeOfLastRequest=new Date().getTime();
};
function createDetailWindow(detailUrl)
{
console.log('createDetailWindow');
chrome.tabs.create({windowId: mainWindowId, url: detailUrl},
function (tab)
{
console.log(' OpenDetailPg Created Tab '+tab.id+' with slow down of '+slowDown().toFixed(0));
chrome.tabs.executeScript(tab.id, {file: 'profile.js'});
})
};
function slowDown()
{
//console.log(' Slowdown: last interval '+ (new Date().getTime()-timeOfLastRequest)+' milisec.')
if (new Date().getTime()-timeOfLastRequest>minDelay)
{
console.log(' Previous Delay Greater Than Minimum Delay, Resetting Speed Count');
sendCount=1;
timeOfFirstRequest=new Date().getTime(); //else forget about it, reset time of first request
}
elapsedTime=new Date().getTime()-timeOfFirstRequest;
avgSpeed = elapsedTime/sendCount;
//console.log(" Started @ "+timeOfFirstRequest+" Current time "+new Date().getTime()+" Avg time fr 1st HTTPRequest "+avgSpeed.toFixed(0)+' milisec over '+sendCount+' Req');
if (avgSpeed<minDelay)
{
//console.log(" Delaying request by "+((minDelay-avgSpeed).toFixed(0))+" milisecs");
return minDelay-avgSpeed;
}
else
{
//console.log(' No Delay on Request');
return 1;
}
};