为什么我的JavaScript在Safari上的严格模式下无法正常工作?

时间:2016-05-14 16:05:44

标签: javascript ios macos safari strict-mode

我建立了一个使用一些简单JavaScript的网站。经过一些测试后,我发现我的JavaScript在iOS设备上的行为与我可以测试的所有其他设备的行为完全不同。

经过几个小时的反复试验后,我发现只有在严格的模式下才会出现意外行为,但是进一步解决这个问题非常困难,因为我的Apple /软件/硬件受限于Apple开发和测试

为什么我的代码不能在严格模式下工作,只能在某些(Apple,特别是Apple)设备上工作?

1 个答案:

答案 0 :(得分:4)

可能出现的问题

您的问题可能是您已启用严格模式的const声明。

可能的解决方案

如果是这种情况,并且您希望继续使用严格模式,则一种解决方案是使用var而不是const,并且只需更加小心地将变量视为常量。

有关此问题的更多信息

事实上,没有OS X计算机很难调试此问题,因为您无法使用iOS Safari的远程控制台" Web Inspector"。

然而,according to caniuse,对于Safari和iOS Safari的当前版本(编写时分别为9.1和9.3)const是:

  

仅在非严格模式下识别

您可以使用以下示例(or this JSFiddle)自行测试。这段代码在Ubuntu和Android上使用Chrome和Firefox时可以正常运行,但在Firefox for iOS或iOS Safari上却没有。

HTML

<pre></pre>
<form>
    <input type="submit">
</form>

JS

"use strict";

var form = document.querySelector("form");
var info = document.querySelector("pre");

// This const declaration in conjunction with strict mode will
// cause this script not to work on iOS devices
const _MEANINGLESS = 0;

form.addEventListener("submit", function(event) {
    event.preventDefault();
    info.textContent = "Submit event captured.\n";
});