javascript - 使用 IE 和 SSL 编写 Dojo

标签 javascript internet-explorer ssl dojo

我的应用程序在 仅 SSL 网站上使用 Dojo 1.1.1。它目前正在利用 dijit.ProgressBardijit.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 被设置为空,但这现在似乎已修复(在查看源代码时)。

还有其他人遇到这个问题吗?让 Dojo仅 SSL 网络服务器上与 IE 良好配合的最佳实践是什么?

最佳答案

在检查了 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{...

有什么问题? 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{...

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

我的前 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") + '");';

这行不通,因为背景图片标签不包含 HTTP。尽管该位置是相对的,但 IE7 不知道它是否安全,因此会发出警告。

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

一切顺利!页面加载没有零星的安全问题。

关于javascript - 使用 IE 和 SSL 编写 Dojo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59734/

相关文章:

javascript - 尝试使用 Ember 获取 json 数据

javascript - ap-angular2-fullcalendar 和外部 API

css - Zurb Foundation 5 Reveal 模态仅在 IE11 中错误定位

javascript findIndex 与 IE 的问题

javascript - Cufon 不支持 SSL?

apache - ReSTLet 用户认证

javascript - 如何使用 php 提交输入值,具体取决于基于下拉选择显示的输入值

javascript - 如何在Electron中将窗口图标设置为缓冲图像?

c# - 使用 C# 将 Internet Explorer 浏览器嵌入到 Winforms

amazon-web-services - 跨 TCP 443 连接的 Amazon ELB session 粘性?