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

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

6 голосов
/ 12 сентября 2008

Мое приложение использует Dojo 1.1.1 на веб-сайте только для SSL . В настоящее время он использует dijit.ProgressBar и dijit.form.DateTextBox.

Все отлично работает в Firefox 2 & 3 , но как только я попробую те же скрипты в IE7 , в результате откроется раздражающее диалоговое окно Информация о безопасности:

Эта страница содержит как безопасные, так и незащищенные элементы. Хотите отобразить незащищенные элементы?

Я внимательно изучил страницу на предмет любых не-HTTPS ссылок безрезультатно. Похоже, что-то специфическое для dojo.js. Раньше был сбой iframe, когда src был установлен на ничто, но это, похоже, исправлено (при рассмотрении источника).

Кто-нибудь еще имеет эту проблему? Каков наилучший способ заставить Dojo хорошо играть с IE на веб-сервере только для SSL ?

Ответы [ 3 ]

9 голосов
/ 16 сентября 2008

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

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

1 голос
/ 29 сентября 2011

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

1 голос
/ 13 сентября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...