【问题标题】:Apple devices incompatible Javascript codeApple 设备不兼容的 Javascript 代码
【发布时间】:2018-07-15 05:52:51
【问题描述】:

我正在处理包含 Javascript 函数的复杂页面,这些函数必须在多个目标上执行,包括移动设备,包括 Android 平板电脑和 Apple iPad 和 iPhone。 无论如何,每次Apple iOS设备发现以下代码没有任何明显原因并且没有返回任何错误时都会停止。在这段代码之前,我有 jQuerybootstrap 库。如果我删除该功能,一切正常。该函数必须返回其索引最接近给定索引的元素:

function getClosestTS2(arr,tk) {
    // Returns the element kaving the ts closest to tk
    var closest= Object.keys(arr)
        .map(k => ({ k, delta: Math.abs(tk - k) }))
        .sort((a, b) => a.delta - b.delta)[0].k;
    return closest;
    }

如果我在与 iOS 不同的任何其他环境中运行代码,则不会出现任何问题。有什么线索吗?

编辑:根据 CBroe 的建议添加了来自 browserstack.com 的调试屏幕截图

【问题讨论】:

  • 您究竟是如何检查错误...?
  • @CBroe,Javascript 代码无法在这段代码之后执行。因为我没有 iMac 或任何其他 Apple 系统,所以我看不到调试控制台。但我检测到,如果我删除此功能,则页面已加载并正常工作,如果存在这段代码,则 javascript 执行被中断,并且 document.ready 永远不会启动(上面的代码在 document.ready 之外)。希望对您有所帮助。
  • 然后你可以使用 browserstack.com 之类的服务进行测试,它可以让你访问开发者控制台。
  • caniuse.com/#feat=arrow-functions ... iOS 9.3 不支持
  • 有一些“转译器”可用于将您的 ES6/ECMAScript 2015 代码转换为“旧”JavaScript,而“旧”浏览器也可以理解 - f.e. babeljs.io 这使您可以继续以“现代方式”编写代码,而不必排除旧版浏览器,因此不妨看看这是否适合您。

标签: javascript ios arrays compatibility array.prototype.map


【解决方案1】:

正如 CBroe 所指出的,箭头函数在多个版本(甚至是最近的版本)中不受支持,因此我需要用以下(效率较低)替换该函数:

function getClosestTS2(arr,k) {
    var d;
    var mind=4294967296;
    var mink=0;
    for(e in arr){
        d=Math.abs(e-k);
        if(d<mind) {
            mink=e;
            mind=d;
            }
        }
    return mink;
    }

这将不使用箭头功能,并且可以在 iOS

【讨论】:

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