Safari iOS 未加载 Javascript 文件?

Bil*_*Boy 7 html javascript safari ios

由于最近的安全漏洞,我刚刚升级了我的 iOS,但我发现我的网站无法在我的手机上正常加载!

我已经把问题归结为一个简化的例子......

索引.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>
Run Code Online (Sandbox Code Playgroud)

演示.js =

var i = 0;

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

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

建议?

谢谢,

账单


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

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

阻止了“ http://192.168.133.1/demo.html ”中的脚本执行,因为文档的框架已被沙盒化并且未设置“allow-scripts”权限。

由于我是在 esp8266 上的一个朴素的网络服务器上提供这个页面的,这条消息激励我调整我的 HTTP 标头。HTTP 标头似乎没问题。

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

任何帮助将非常感激。

J.V*_*nen 5

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

问题出在我用作实现基础的示例中。在这些示例中,Web 服务器在 OK 情况下对浏览器的 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。例如,当浏览器发送 request 时GET / HTTP/1.1,服务器不仅发送默认网页,还包括

HTTP/1.1 200 OK
Content-Type: text/html
Run Code Online (Sandbox Code Playgroud)

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


Kar*_*ode 0

有同样的问题(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 下的相关内容。

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