【问题标题】:Why is my JavaScript not working correctly in strict mode on Safari?为什么我的 JavaScript 在 Safari 的严格模式下无法正常工作?
【发布时间】:2016-05-14 16:05:44
【问题描述】:

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

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

为什么我的代码不能在严格模式下运行,并且只能在某些(尤其是 Apple)设备上运行?

【问题讨论】:

  • 关于代码是什么的任何提示?
  • 我真的只是想结合我给出的答案发布这个问题,因为我认为它可能能够帮助将来遇到相同或类似问题的人。对于这种特定情况,我认为代码并不完全相关。

标签: javascript ios macos safari strict-mode


【解决方案1】:

可能的问题

您的问题可能是您在启用严格模式的情况下进行了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 上按预期工作,但在 iOS 或 iOS Safari 上的 Firefox 上没有。

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";
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多