我已经建立了一个使用一些简单 JavaScript 的网站。经过一些测试,我发现我的 JavaScript 在 iOS 设备上的行为与我可以测试的所有其他设备相比非常不同。
经过几个小时的反复试验,我发现只有在严格模式下才会出现意外行为,但是由于我对 Apple 开发和测试的软件/硬件有限,因此很难进一步解决问题。
为什么我的代码不能在严格模式下工作,并且只能在某些(特别是 Apple)设备下工作?
我已经建立了一个使用一些简单 JavaScript 的网站。经过一些测试,我发现我的 JavaScript 在 iOS 设备上的行为与我可以测试的所有其他设备相比非常不同。
经过几个小时的反复试验,我发现只有在严格模式下才会出现意外行为,但是由于我对 Apple 开发和测试的软件/硬件有限,因此很难进一步解决问题。
为什么我的代码不能在严格模式下工作,并且只能在某些(特别是 Apple)设备下工作?
您的问题可能是您已const
启用严格模式的声明。
如果是这种情况,并且您想继续使用严格模式,一种解决方案是使用var
而不是const
,并且更小心地将变量视为常量。
实际上,如果没有 OS X 计算机,很难调试此问题,因为您无法使用 iOS Safari 的远程控制台“Web Inspector”。
但是,根据 caniuse的说法,对于 Safari 和 iOS Safari 的当前版本(截至撰写时分别为 9.1 和 9.3)const
是:
仅在非严格模式下识别
您可以使用以下示例(或此 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";
});