javascript - 这个糟糕的代码是如何完全破坏 IOS PhoneGap/cordova 应用程序中的 JS 文件的?

标签 javascript ios cordova webview

唉……

var dcCnt = 0;
(function deviceCheck(){
    if(!device || dcCnt +=1 >= 25){
        if(dcCnt >=25){
            alert('device object load timed out');
            return false;
        }
        else {
            alert('device loaded after deviceready');
            return true;
        }
        setTimeout( deviceCheck, 200);
    }
});

是的,是的,很明显 if(!device dcCnt+=1 || dcCnt += 1 >= 25) 将成为一个问题。这个怪物的原始版本只是在它后面加上 () parens 来启动整个事情。这只是调试代码,试图解决我由于某种原因没有获得设备对象的问题(最终证明是 if 语句中的提升变量——我应该更清楚)。在我进行了一次调整后,它似乎并没有起作用,我只是为了以后再研究它而杀死了 Action 参数。

但事情是这样的。尽管从未被调用,但这段代码在未被注释掉时将整个 JS 文件变成了 iOS 中的一个巨大的黑洞,从中无法返回呃......可以返回。我可以在链接文件前后触发脚本。但是在开始或结束时没有警报起作用。 Try/Catch 语句什么也没做。就像整个文件都消失了一样。

Android,当然,运行良好。 'use strict' 正在发挥作用,但它似乎对 ios 或 android 无关紧要。如果您不尝试启动它,在 Chrome 中也能正常工作。那么到底发生了什么?

最佳答案

我假设 WebKit 无法解析 js 文件,很可能是由于某些内容没有被正确注释掉。

将其放入 iOS 模拟器中并在模拟器上运行 Safari 的 Web Inspector。您可能会看到 js 语法错误。

至于为什么它在 Android 上运行而不是 iOS...我猜有些浏览器比其他浏览器更挑剔。

关于javascript - 这个糟糕的代码是如何完全破坏 IOS PhoneGap/cordova 应用程序中的 JS 文件的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19439001/

相关文章:

ios - 将正在运行的 float 传递给另一个类

ios - 更改 NSLayoutConstraint 常量在layoutSubviews中不起作用

ios - __NSArrayM 插入对象 :atIndex:]; object cannot be nil

javascript - 获取的数据未显示在新页面上(JavaScript/HTML)

javascript - 如何在单击的 li 上添加类并从 vue 2 中的 li 的任何位置删除旧类

javascript - react 与 Bootstrap : returning the value of selected radio button

javascript - 在 phonegap 中的 touchstart 和 touchend 事件旁边使用滚动

phonegap 2.9.1 的 IOS Write 插件

javascript - 我想使用 Angular JS 重定向到另一个页面

javascript - 排序选择选项元素