Изучив исходный код JavaScript для Dijit, я подумал, что, скорее всего, ошибка вызвана «небезопасной» ссылкой на динамически сгенерированный IFRAME. Обратите внимание, что существует две версии файла сценария: несжатый представляет исходный источник (dijit.js.uncompressed.js), а стандарт (dijit.js) был сжат для оптимального времени передачи.
Поскольку несжатая версия является наиболее читаемой, я опишу свое решение на ее основе. В строке # 1023 IFRAME отображается в JavaScript:
if(dojo.isIE){
var html="<iframe src='javascript:\"\"'"
+ " style='position: absolute; left: 0px; top: 0px;"
+ "z-index: -1; filter:Alpha(Opacity=\"0\");'>";
iframe = dojo.doc.createElement(html);
}else{...
В чем проблема? IE не знает, является ли src для IFRAME "безопасным", поэтому я заменил его следующим:
if(dojo.isIE){
var html="<iframe src='javascript:void(0);'"
+ " style='position: absolute; left: 0px; top: 0px;"
+ "z-index: -1; filter:Alpha(Opacity=\"0\");'>";
iframe = dojo.doc.createElement(html);
}else{...
Это самая распространенная проблема с инструментами JavaScript и SSL в IE. Поскольку IFRAME используются в качестве прокладок из-за плохой поддержки наложения для DIV, эта проблема чрезвычайно распространена.
Мои первые 5-10 перезагрузок страницы в порядке, но затем снова появляется ошибка безопасности. Как это возможно? Эта же страница является «безопасной» для 5 перезагрузок, а затем IE выбирает ее как «небезопасную» при 6-й загрузке.
Как оказалось, в событии onload для dijit.wai также устанавливается фоновое изображение (строка # 1325). Это звучит примерно так:
div.style.cssText = 'border: 1px solid;'
+ 'border-color:red green;'
+ 'position: absolute;'
+ 'height: 5px;'
+ 'top: -999px;'
+ 'background-image: url("' + dojo.moduleUrl("dojo", "resources/blank.gif") + '");';
Это не сработает, поскольку тег background-image не содержит HTTP. Несмотря на то, что расположение относительное, IE7 не знает, безопасно ли оно, поэтому ставится предупреждение.
В данном конкретном случае этот CSS-код используется для проверки доступности (A11y) в Dojo. Поскольку это не то, что мое приложение будет поддерживать, и поскольку у этого метода есть другие общие ошибки, я решил удалить все в onload () для dijit.wai.
Все хорошо! Никаких спорадических проблем с безопасностью при загрузке страницы.