Мне нужно запустить очень длинный JavaScript на моей странице. Клиент жалуется, что IE показывает диалоговое окно с предупреждением о слишком длинном скрипте. К сожалению, мы не можем уменьшить длину скрипта, поэтому я пытаюсь найти обход проблемы.
По данным Веб-сайт поддержки Microsoft :
IE отслеживает общее количество выполненных
Сценарий оператора и сбрасывает значение каждый раз, когда запускается новое выполнение сценария, например, по таймауту или из обработчика события. Отображает
диалоговое окно "долгосрочный сценарий", когда
это значение превышает пороговое значение.
Однако я пытался использовать setInterval () и setTimeout (), чтобы разбить мой скрипт на части, но ни один из них не работает. Я использую браузер IE8. Мой код выглядит следующим образом:
<html>
<head>
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.min.js"></script>
</head>
<body>
<div id ="test"></div>
<div id ="log"></div>
</body>
<script>
var repeat =0;
function heavyTask(){
if (repeat<50){
y = longRun();
setTimeout("heavyTask()",100);
}else{
$('#test').html("done!");
}
}
function longRun(){
for(var i =0; i<20000;i++){ }
repeat++;
$('#log').append('<div>repeat: '+ repeat +'</div>');
};
$(document).ready(function () {
setTimeout("heavyTask()",100);
});
</script></html>
Чтобы код работал, вам нужно отредактировать реестр, перейти
HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ Styles и установите значение DWORD с именем «MaxScriptStatements» равным 100 000. Если ключ Styles отсутствует, создайте новый ключ, который называется Styles.
Спасибо