Safari iOS没有加载Javascript文件?

时间:2016-07-22 20:27:05

标签: javascript html ios safari

由于最近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);

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

建议?

谢谢,

比尔

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

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

  

在“http://192.168.133.1/demo.html”中阻止执行脚本,因为   文档的框架是沙箱和'allow-scripts'权限   没有设定。

由于我在esp8266上的homespun网络服务器上提供此页面,因此此消息激励我调整我的HTTP标头。 HTTP标头似乎没问题。

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

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

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

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

  1. http://myip中阻止执行脚本,因为文档是 框架是沙箱,并且未设置“允许脚本”权限。
  2. 沙盒http://myip/image.jpg',因为它使用的是HTTP / 0.9。
  3. 第一个错误导致浏览器拒绝加载我的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并将沙箱取回它。

答案 1 :(得分:0)

有同样的问题(iOS 9.3.3 Safair / Chrome和OSX与Safari 9.1.2)。

原因是我们使用了一个javascript库来尝试加载我们所有图像的视网膜版本。不知何故,请求使用HTTP / 0.9而不是HTTP / 1.1发送,这使得Safari在所有后续请求中自动沙箱化整个页面(错误消息表示类似&#34;自动沙盒化...因为HTTP / 0.9&#34; )。 iOS 9.3.3(https://support.apple.com/en-us/HT206902)的安全更改日志提到了CVE-2016-4651下的相关内容。

确保您的Web服务器支持HTTP / 1.1,并且您使用HTTP / 1.1

请求页面