У нас есть некоторый 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, не выполняющим динамически включенные сценарии? Если да, знаете ли вы, как обойти эту проблему?