【问题标题】:Coding Dojo with IE and SSL使用 IE 和 SSL 编写 Dojo
【发布时间】:2010-09-08 18:04:11
【问题描述】:

我的应用程序在 SSL-only 网站上使用 Dojo 1.1.1。它目前正在利用dijit.ProgressBardijit.form.DateTextBox

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

此页面包含安全和非安全项目。是否要显示不安全的项目?

我已仔细检查页面是否有任何 非 HTTPS 引用无济于事。它似乎是 dojo.js 特有的东西。曾经有一个iframe 故障,其中src 设置为空,但现在似乎已修复(在查看源代码时)。

其他人有这个问题吗?让 DojoSSL-only 网络服务器上与 IE 良好配合的最佳实践是什么?

【问题讨论】:

    标签: javascript internet-explorer ssl dojo


    【解决方案1】:

    查看 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") + '");';
    

    这不起作用,因为 background-image 标记不包含 HTTPs。尽管位置是相对的,但 IE7 不知道它是否安全,因此会发出警告。

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

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

    【讨论】:

    • 哇,太激烈了。大张旗鼓地发布解决方案!
    • 顺便说一句,您可能应该向他们提出问题 [dojo]。 :)
    • 谢谢;我希望它不会那么激烈。用 Dojo 打开一个问题的好点,虽然我的修复不完整,但它应该是一个很好的起点。
    • 您提交错误了吗?我怀疑其他人也会受到影响。
    【解决方案2】:

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

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

    【讨论】:

    • 状态栏上的挂锁没有划掉。就浏览器而言,没有不安全的链接。简单地删除对 Dojo 的 JavaScript 引用确实消除了错误,所以我怀疑 Dojo 脚本中隐藏着一些东西导致了这种情况。
    【解决方案3】:

    如果您使用 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

    【讨论】:

      猜你喜欢
      • 2012-09-03
      • 2012-01-22
      • 2013-08-01
      • 2017-11-16
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      相关资源
      最近更新 更多