简单的jQuery代码在通过https加载网站后无法正常工作

40

我有一段简单的jQuery代码,可以提交表单并隐藏/显示一些屏幕信息。在测试时它能正常工作,但在通过https加载后,它会在IE7中出现问题。看起来它完全崩溃了,没有任何脚本效果。我还收到IE警告"某些元素是不安全的"。

有人遇到过这种情况吗?或者更好的是,有解决办法!我必须通过https加载页面,因为这是一个信用卡支付页面。

6个回答

79
三个先前的答案都提到了一个问题,即保护的“https”页面试图从“http”路径中包含脚本或其他资源(样式表、图片等)...
我想补充一点,注意如果您有一个情况,在该情况下可以通过 http 或 https 加载相同的页面,则可以创建“协议无关”的 URL - 协议将被假定为与当前页面相同。请注意,这仅适用于访问不同域上的资源(如果这些不同域支持 http 和 https,则仅会起作用),因为显然,如果您要访问同一域上的资源,则根本不需要以 http:// 开头...
例如,每个以下的三个资源都会根据当前页面的访问方式自动选择 http 或 https:
<script src="//www.example.com/whatever.js" type="text/javascript"></script>
<img src="//www.example.com/someimage.png" alt="whatever" />
<link href="//www.example.com/styles.css" rel="stylesheet" />

11
如果您通过 https:// 服务提供页面,则每个资源链接也应使用 https://。要注意。
<script type="text/javascript" src="http://.../jquery.js"></script>

5

感谢您提供的所有信息。问题最终被追踪到 Thickbox.js 中提到的一张图片。

由于该图片使用的是 http://(而不是 https://)链接,这导致了错误消息的出现。弹出的安全消息有一个“是”或“否”的选项来加载不安全的内容,点击“是”会告诉浏览器停止加载任何 jQuery。

这确实是一个棘手的问题,所以我想回答自己,希望能帮助其他遇到同样问题的人。


2
如果客户端使用HTTPS请求页面,则页面应通过HTTPS链接到所有媒体(图像、脚本、样式表)。
如果客户端使用HTTP请求页面,则应在响应中发送此HTML片段:
<head>
    <script
        type="text/javascript"
        src="http://my.domain.com/app/media/jquery.js"
    ></script>
</head>

如果客户端使用HTTPS请求页面,则应在你的响应中发送此HTML片段:
<head>
    <script
        type="text/javascript"
        src="https://my.domain.com/app/media/jquery.js"
    ></script>
</head>

区别在于,当客户端使用HTTPS请求页面时,服务器会返回一个以https://开头的链接,该链接用于启动jquery脚本。


0

我使用的浏览器是IE 11。

解决方案:不要使用兼容性模式。 工具->兼容性视图设置。

症状:

程序在http模式下运行良好。

浏览器报告了一个错误,声称需要一个标识符。

浏览器不允许在jquery库文件上进行调试。 如果通过开发人员控制台日志中的错误消息访问该文件,则可以在文件上设置断点,但断点被禁用。

浏览器清楚地显示文件已成功加载。

在使用其他浏览器时没有出现错误。

提示:我将测试程序简化为仅加载jquery库文件和显示固定文本的单个div,因此没有我的代码出错。 这大大简化了可能出错的列表。


0

如果您正在使用来自code.jquery.com的jquery,您可能会看到类似的行为。

例如:

code.jquery.com没有有效的SSL证书。

这可能会导致其他脚本无法正常工作。

请改用Google CDN或从您自己的服务器加载jquery。

希望能对您有所帮助。


2
不是真的。截至2013年10月1日,code.jquery.com的SSL证书没有问题,已经通过验证。 - m000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接