【问题标题】:Safari iOS not loading Javascript file?Safari iOS 不加载 Javascript 文件?
【发布时间】:2016-07-22 20:27:04
【问题描述】:

由于最近security bug,我刚刚升级了我的iOS,我发现我的网站不再在我的手机上正常加载!

我已将问题归结为一个简化的示例...

index.html =

<html>
<head>
    <title>Demo</title>
    <meta name="description" content="Test of basic Javascipt function">
    <script src="demo.js"></script>
</head>
<body class="body">
    <div id="main">
    </div>
</body>
</html>

demo.js =

var i = 0;

function update() {
    'use strict';
    document.getElementById("main").innerHTML = i;
    i = i + 1;
}
setInterval(update, 1000);

在我的桌面上,这会产生一个迭代计数,但是当在我的手机(Mobile/12G34 Safari/601.1)上使用 Safari 查看时,javascript 文件根本无法加载???? Javascript 文件甚至没有显示在我通过 USB 连接的 WebInspector 的“所有资源”选项卡下。

建议?

谢谢,

比尔


编辑: 这个问题没有得到回应,但我仍在努力解决这个问题。我找到了更多信息。

使用 Safari WebInspector 我发现 javascript 没有加载,因为...

在“http://192.168.133.1/demo.html”中阻止脚本执行,因为 文档的框架是沙盒和“允许脚本”权限 未设置。

由于我是在 esp8266 上的普通网络服务器上提供此页面,因此这条消息启发了我调整我的 HTTP 标头。 HTTP 标头似乎很好。

我无法弄清楚这个 html 页面是如何被沙盒化的,以及如何“允许脚本”以便我可以在 Safari Mobile 中运行我的脚本。

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript html ios safari


    【解决方案1】:

    在为我的 Arduino 项目实现 Web 服务器功能时,我遇到了完全相同的问题。我的 Web 服务器实现在桌面浏览器和 iOS (9.3.5) 中的 Chrome 上运行良好。我在使用 Firefox (5.1 (1)) 和 iOS 中的 Safari 时都遇到了问题。我的网页使用包括 jQuery 在内的脚本。脚本用于通过 AJAX/JSON 从 Arduino 传输数据。

    问题出在我用作实现基础的示例中。在这些示例中,Web 服务器在正常情况下对浏览器的 HTTP GET 请求的回复除了请求的实际文档之外不包含任何其他内容。在这种情况下,Web 浏览器认为 Web 服务器正在使用 HTTP/0.9。此外,缺少 Content-Type。大多数浏览器都可以“猜测”回复的 Content-Type 是什么,尽管它没有包含在内。

    就我而言,Safari 报告了两个错误

    1. 在http://myip 中阻止脚本执行,因为文档的 框架已被沙盒化,并且未设置“允许脚本”权限。
    2. 沙盒 http://myip/image.jpg' 因为它使用的是 HTTP/0.9。

    第一个错误导致浏览器拒绝加载我的 javascript 和 jquery.js。当然,在那之后AJAX就不能工作了。桌面版的 Firefox 也抱怨 JSON 回复格式不正确,但仍然可以正常工作。

    我只是更改了实现,以便 HTTP 回复始终在实际数据之前包含 HTTP 版本、状态代码和 Content-Type。例如,当浏览器发送请求GET / HTTP/1.1时,服务器不只是发送默认网页,而是包括

    HTTP/1.1 200 OK
    Content-Type: text/html
    

    之后,所有错误都消失了。似乎新版本的 Safari 不喜欢接收 HTTP/0.9,并且会将返回的内容沙箱化。

    【讨论】:

      【解决方案2】:

      遇到了同样的问题(iOS 9.3.3 Safair/Chrome 和 OSX 上的 Safari 9.1.2)。

      原因是我们使用了一个 javascript 库来尝试加载所有图像的视网膜版本。不知何故,使用 HTTP/0.9 而不是 HTTP/1.1 发送的请求使 Safari 自动对所有后续请求的整个页面进行沙箱处理(错误消息说“由于 HTTP/0.9 自动沙箱化......”)。 iOS 9.3.3 (https://support.apple.com/en-us/HT206902) 的安全更新日志提到了 CVE-2016-4651 下的相关内容。

      确保您的网络服务器支持 HTTP/1.1 并且您使用 HTTP/1.1 请求页面

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-04
        • 2017-05-03
        • 1970-01-01
        • 2018-05-19
        • 2016-07-25
        • 1970-01-01
        • 2017-09-11
        • 2023-04-01
        相关资源
        最近更新 更多