使用IE和SSL编写Dojo

esa*_*ant 6 javascript ssl dojo internet-explorer

我的应用程序在仅限SSL的网站上使用Dojo 1.1.1.它目前正在利用和a .dijit.ProgressBardijit.form.DateTextBox

Firefox 2和3中一切都运行良好,但是当我在IE7中尝试相同的脚本时,结果就是一个烦人的安全信息对话框:

此页面包含安全和非安全项目.要显示非安全项吗?

我仔细检查了任何非HTTPS引用的页面无济于事.它似乎是特定的东西dojo.js.有一个iframe小故障src被设置为空,但现在似乎已修复(在查看来源时).

其他人有这个问题吗?在使用SSL的 Web服务器上使DojoIE良好匹配的最佳实践是什么?

esa*_*ant 9

在查看Dijit的JavaScript源代码之后,我认为错误可能是由对动态生成的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{...
Run Code Online (Sandbox Code Playgroud)

有什么问题?IE不知道IFRAME的src是否"安全" - 所以我用以下内容替换它:

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{...
Run Code Online (Sandbox Code Playgroud)

这是IE中JavaScript工具包和SSL最常见的问题.由于DIV的覆盖支持不良,IFRAME被用作垫片,因此这个问题非常普遍.

我的前5-10页重新加载很好,但随后又出现了安全错误.这怎么可能?对于5次重新加载,同一页面是"安全的",然后当第6次加载时,它被IE选为"不安全".

事实证明,dijit.wai的onload事件中还设置了背景图像(第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") + '");';
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为background-image标记不包含HTTP.尽管该位置是相对的,但IE7不知道它是否安全,因此提出了警告.

在此特定实例中,此CSS用于测试Dojo中的辅助功能(A11y).由于这不是我的应用程序将支持的东西,并且由于此方法存在其他一般错误问题,因此我选择删除onij()中dijit.wai的所有内容.

一切都很好!页面加载时没有零星的安全问题.

  • 哇,这很激烈.非常适合发布解决方案! (2认同)

Til*_*ill 1

如果您的页面从非 https URL 加载文件,Firefox 应该会告诉您同样的事情。底部(状态栏中)的锁定符号应该被划掉,而不是出现错误。您确定情况不是这样吗?

如果您看到该符号,请单击它并检查哪些文件是“不安全”的。