【问题标题】:Nivo slider jQuery causing a mixed content error in IE 8?Nivo 滑块 jQuery 在 IE 8 中导致混合内容错误?
【发布时间】:2025-12-03 11:20:09
【问题描述】:

我在 HTTPS 上使用 Nivo jQuery 滑块时遇到问题:站点及其 javascript 似乎在 IE 8 中引发了混合内容错误。

我目前在 Dev7 Studios 论坛上发布了一个论坛帖子,但还没有回复。我在 IE 8 混合内容错误上搜索了几天。

到目前为止,我还没有找到一个明确的解决方法,除了一篇文章中有人说 jquery 文件中的“innerHTML”有时会导致错误。但他并没有真正列出明确的解决方法。

有人对此有任何见解吗?任何帮助或指导表示赞赏。

【问题讨论】:

  • 你有没有“src”属性的<iframe>元素吗?这可能会导致问题。
  • 不,页面上没有使用 iframe。它实际上位于安全 SharePoint 2010 网站的内容编辑器 Web 部件中。对它所在的 div 使用基本 HTML。经过大量测试,只有在调用并运行“jquery.nivo.slider.pack.js”文件时才会发生错误。如果我解开它,没有错误。
  • 我还连接了“HTTPWatch”并检查,没有传出 HTTP 线路到服务器..
  • 这条评论来自另一个博客:“我刚刚发现还有另一个原因。jQuery 使用“innerHtml”来表示 .remove()、.html()、.empty() 等。 “innerHtml”会在 IE 中导致混合内容警告。一种快速解决方法是使用 $(elem).contents().css(“display”,”none”) 隐藏当前内容,然后附加新内容。”但我不知道他在“隐藏当前内容”之后是什么意思..我需要一些澄清或一个例子..
  • 我在 IE 中从来没有遇到过“innerHTML”这样的问题,而且我一直在使用 jQuery、Prototype 和各种 IE 版本工作很长时间。

标签: javascript jquery internet-explorer nivo-slider


【解决方案1】:

我遇到了同样的问题,并已将其追溯到 IE8 中的错误。此页面上的 cmets 引导我找到了解决方案:

http://blogs.msdn.com/b/ieinternals/archive/2009/06/22/https-mixed-content-in-ie8.aspx

这位 MS 开发人员说:

令人着迷。这是一个竞争条件。

调试器报告以下是正在触发的 URL 提示:

“关于:/images/lightview/inner_slideshow_play.png”

当然,该 URL 实际上并不存在于您的标记中。它看起来 就像动态创建 IFRAME 和注入内容一样 进入那个框架。空框架的默认 URL 是 about:blank, 这会导致提示。

作为一种解决方法,使用绝对 URL 可能会起作用,或者通过 使用服务器上空白页面的 SRC 初始化 IFRAME (这也应该可以解决 IE6 的混合内容问题)。

普通浏览器对于不完全限定的动态内容、协议和所有内容的 URL 没有问题。但是 IE8 有时会丢球,而不是放入协议和主机,而是在您的路径前面放入“about:”,并且在 https 上下文中无法信任它。

我编辑了 nivoslider 来限定它动态绘制的所有图像的 URL。需要进一步开发以允许在图像 URL 中使用查询字符串。

这是我的edited source

【讨论】:

  • 很棒的亚历克斯!如果您有涉及修复的 sn-p,请告诉我,我很乐意看到它。我们现在已经移除了 Nivo,但我很想把它放回去。
  • 在我看来,它开始像一个 jquery 错误,由于 nivoslider 的频繁调用而加剧......仍在努力。
  • 完全有道理,因为在进入滑块循环之前您不会看到错误。我认为我有正确的想法,但没有开发修复程序的经验。祝你好运!
  • 在我告诉你我已经修复它之前,我会说我认为在你的 HTML 源代码中为滑块图像使用完全限定的 URL 也应该可以解决这个问题。对 URL 进行资格预审对我来说并不容易,因为我正在处理的页面是由多个虚拟主机提供的,但是 javascript 应该仍然能够处理相对 URL,所以我更愿意解决这个问题。
  • 我更新了我的答案,提供了一个解决问题的代码链接。我还有一个缩小版:jquery.nivo.slider.pack_eah.js
【解决方案2】:

我遇到了同样的问题。在标题部分,我将 src 从 http://"mysite"/jquery.nivo.slider.pack.js 更改为 /jquery.nivo.slider.pack.js 并工作。

【讨论】:

  • 可能想为该分数 motel1 找到一些当前未回答的问题,这是已回答且 3 岁的问题