Мое приложение использует Додзё 1.1.1 на веб-сайте Только SSL. В настоящее время он использует преимущества dijit.ProgressBar и dijit.form.DateTextBox.
В Firefox 2 и 3 все работает потрясающе, но как только я пробую те же сценарии в IE7, в результате появляется раздражающий диалог информации о безопасности:
This page contains both secure and non-secure items. Do you want to display the non-secure items?
Я внимательно изучил страницу на предмет каких-либо ссылок на без HTTPS, но безрезультатно. Похоже, это что-то специфическое для dojo.js. Раньше имел место сбой iframe, когда src был установлен на ничего, но теперь это, похоже, исправлено (при просмотре источника).
У кого-нибудь еще есть эта проблема? Каковы лучшие практики для того, чтобы заставить Додзё хорошо работать с IE на веб-сервере Только SSL?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если ваша страница загружает файлы с URL-адреса, отличного от https, Firefox должен сказать вам то же самое. Вместо ошибки следует перечеркнуть символ замка внизу (в строке состояния). Вы уверены, что это не так?
Если вы видите символ, щелкните по нему и проверьте, какие файлы «небезопасны».
Изучив исходный код 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 как «небезопасная» при шестой загрузке.
Как оказалось, в событии 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.
Все хорошо! Никаких спорадических проблем с безопасностью при загрузке страницы.
Вау, это интенсивно. Большое спасибо за размещение решения!
Кстати, вам, вероятно, стоит обсудить с ними [додзё]. :)
Спасибо; Я надеялся, что это будет не так сильно. Хороший момент для открытия проблемы с Dojo, хотя мое исправление не завершено, это должно быть отличной отправной точкой.
Вы зарегистрировали ошибку? Я подозреваю, что это может повлиять и на других.
Если вы используете CDN, вы можете включить все модули по HTTPS, как показано здесь.
<script type = "text/javascript">
djConfig = {
modulePaths: {
"dojo": "https://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dojo",
"dijit": "https://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit",
"dojox": "https://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dojox"
}
};
</script>
<script src = "https://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dojo/dojo.xd.js" type = "text/javascript"></script>
При желании вы можете протестировать различные версии. В настоящее время самым последним является 1.6.1.
Замок в строке состояния не перечеркнут. Что касается браузера, то незащищенных ссылок нет. Простое удаление ссылки JavaScript на Dojo действительно устраняет ошибку, поэтому я подозреваю, что в сценарии Dojo есть что-то, что вызывает это.