IE периодически не выполняет динамически добавленный файл сценария - PullRequest
9 голосов
/ 11 февраля 2010

У нас есть некоторый JavaScript, который записывает скрипт, включаемый в динамический ресурс на нашей веб-странице, чтобы позволить нам передавать некоторую информацию между страницами, обслуживаемыми с разных серверов, на которые распространяются межсайтовые сценарии.

Идея состоит в том, что браузер запрашивает файл JavaScript, который обслуживается динамическим ресурсом на стороне сервера (который также помещает некоторую информацию о стороне сервера в запрос). Затем JavaScript-файл выполняется браузером при добавлении на страницу.

Мы столкнулись с проблемой в Internet Explorer, когда JavaScript, возвращаемый в ответе, периодически не выполняется при добавлении на страницу. Проверка трассировки HTTP Fiddler при возникновении проблемы показывает, что скрипт успешно возвращен в браузер.

Чтобы проверить это более надежно, я изменил код, который добавляет скрипт для выполнения 1000 раз в цикле, как показано ниже:

for (var i = 1; i <= 1000; i++) {
    try {
        var script = document.createElement("SCRIPT");
        script.src = serverHome + "/ajavascriptfile.js?token=" + token + "&num=" + i;
        script.id = token;
        document.getElementsByTagName("HEAD")[0].appendChild( script );
    } catch (e) {
        alert(e);
    }
}

Сценарий, возвращаемый ajavascriptfile.js, просто увеличивает счетчик на моей странице:

var output = document.getElementById("output");
output.innerHTML = parseInt(output.innerHTML) + 1;

Никаких исключений в этом тесте не было обнаружено или предупреждено.

Если это выполняется правильно, счетчик должен получить значение 1000 (что он делает в Firefox). Однако в IE6 оно составляет в среднем 900–950, IE7 - около 995–998, а IE8 - шокирующее 750–800.

Кто-нибудь еще сталкивался с Internet Explorer, не выполняющим динамически включенные сценарии? Если да, знаете ли вы, как обойти эту проблему?

Ответы [ 2 ]

1 голос
/ 11 февраля 2010

Возможно, что сценарии не стоят в очереди в порядке их добавления в заголовок, а интерпретируются, как только их активное состояние завершено, либо из кэша, либо из загрузки. Если скрипт, который вы запросили в последнюю очередь, загружается первым, это может вызвать проблему.

IE8 допускает 6 одновременных сценариев, я думаю, что IE7 разрешил 4, а 6 разрешил 2.

Я видел это также в Opera, Chrome и Safari (но пока не в Firefox), поэтому, если я загружаю более одного скрипта, я продолжаю выполнять любые команды, пока не узнаю, что ресурсы доступны - обычно путем тестирования typeof функция из требуемого файла и обратный вызов таймера, если не найден.

0 голосов
/ 11 февраля 2010

Internet Explorer может кэшировать файл скрипта. Попробуйте добавить в src дополнительную энтропию:

script.src = serverHome + "/ajavascriptfile.js?token=" + token + "&num=" + i + '&r=' + Math.random();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...