使用IE和SSL对Dojo进行编码

bqf10yzr  于 2022-12-16  发布在  Dojo
关注(0)|答案(3)|浏览(174)

我的应用程序正在 * 仅使用SSL * 的网站上使用Dojo 1.1.1。它目前正在利用dijit.ProgressBar和一个dijit.form.DateTextBox
Firefox 2 & 3 中一切都运行良好,但当我在 IE7 中尝试相同的脚本时,结果是一个恼人的安全信息对话框:
此页包含安全和不安全项目。是否要显示不安全项目?
我已经仔细检查了页面中的任何 non-HTTPS 引用,但没有结果。它似乎是dojo.js特有的东西。曾经有一个iframe的小故障,src被设置为空,但现在似乎已经修复(在查看源代码时)。
还有其他人遇到过这个问题吗?让 Dojo 在 * 仅支持SSL * 的Web服务器上与 IE 很好地配合使用的最佳实践是什么?

u3r8eeie

u3r8eeie1#

在查看了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的覆盖支持不佳,因此IFRAME被用作垫片,因此这个问题非常普遍。
我的前5-10个页面重新加载是好的,但后来安全错误开始再次弹出。这是怎么可能的?同一个页面是“安全”的5次重新加载,然后它被IE选择为“不安全”时,加载第6次。
事实证明,在dijit.阿威(第1325行)的onload事件中还设置了一个背景图像。

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被用来测试Dojo中的可访问性(A11 y),因为这不是我的应用程序所支持的,而且因为这个方法还有其他常见的bug问题,所以我选择删除dijit. wai的onload()中的所有内容。
一切都很好!页面加载没有零星的安全问题。

9cbw7uwe

9cbw7uwe2#

如果你的页面是从非https URL加载文件,Firefox应该会告诉你同样的事情。底部(在状态栏中)的锁符号应该被划掉,而不是错误。你确定不是这样吗?
如果您看到该符号,请单击它并检查哪些文件是“不安全”的。

yzckvree

yzckvree3#

如果您使用CDN,您可以通过HTTPS包含所有模块,如here所示。

<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

相关问题