Кодирование Dojo с IE и SSL

Мое приложение использует Додзё 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?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
6
0
5 464
3

Ответы 3

Если ваша страница загружает файлы с URL-адреса, отличного от https, Firefox должен сказать вам то же самое. Вместо ошибки следует перечеркнуть символ замка внизу (в строке состояния). Вы уверены, что это не так?

Если вы видите символ, щелкните по нему и проверьте, какие файлы «небезопасны».

Замок в строке состояния не перечеркнут. Что касается браузера, то незащищенных ссылок нет. Простое удаление ссылки JavaScript на Dojo действительно устраняет ошибку, поэтому я подозреваю, что в сценарии Dojo есть что-то, что вызывает это.

esarjeant 15.09.2008 17:58

Изучив исходный код 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.

Все хорошо! Никаких спорадических проблем с безопасностью при загрузке страницы.

Вау, это интенсивно. Большое спасибо за размещение решения!

Till 21.09.2008 18:40

Кстати, вам, вероятно, стоит обсудить с ними [додзё]. :)

Till 21.09.2008 18:41

Спасибо; Я надеялся, что это будет не так сильно. Хороший момент для открытия проблемы с Dojo, хотя мое исправление не завершено, это должно быть отличной отправной точкой.

esarjeant 02.10.2008 00:14

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

Eugene Lazutkin 04.12.2008 23:10

Если вы используете 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.

Другие вопросы по теме