Обход JavaScript продолжительного диалогового окна предупреждения в IE - PullRequest
7 голосов
/ 02 марта 2011

Мне нужно запустить очень длинный 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.

Спасибо

Ответы [ 2 ]

6 голосов
/ 02 марта 2011

Этот предел обработки устанавливается браузером, а не JavaScript.

Вы можете разбить ваш процесс на более мелкие шаги.

См. Этот вопрос: Как вернуть (кратко) контроль браузеру во время интенсивной обработки JavaScript?

1 голос
/ 02 марта 2011

только некоторые синтаксические ошибки ... http://jsfiddle.net/Detect/HnpCr/3/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...