由于最近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中运行我的脚本。
非常感谢任何帮助。
答案 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报告了两个错误
第一个错误导致浏览器拒绝加载我的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
请求页面