2

我以为我已经基本了解了 Javascript,然后弹出了这个(看似基本的)东西:

我有一个使用 Google 地图的 Phonegap / jQuery Mobile 应用程序。如果手机的互联网连接暂时不可用,并且在应用程序启动时尝试加载 Google Maps API 的确切时间,所有与地图相关的功能自然将无法正常工作。

然而,奇怪的是这段代码会导致它所在的函数在 if 检查之后中断并停止执行(这意味着该doSomething()行永远不会执行):

function myFunction() {
    if(google === undefined) {
        alert("Google Maps didn't load!");
    }

    doSomething();
}

在 Safari 的开发人员工具中查看控制台时,我在这篇文章的标题中看到了错误。

检查像这样的未定义变量不应该是安全的吗?我想处理未加载 Google Maps API 的这种边缘情况,但如果我无法检查未定义,我该怎么做?我试着做if(!google),但结果是一样的。

当用户使用地图导航到页面时,我还尝试使用他的 Google Loader 动态加载地图 API,但我无法让它工作(加载器也必须动态加载才能有帮助,我似乎无法动态加载任何脚本)。我也尝试使用纯 Javascript 动态执行此操作,但我认为document.writeGoogle Maps API 中的 Javascript 在 Mobile Safari 上打破了这一点。我也尝试使用 jQuery$.getScript()没有成功。

无论如何,如果我能检测到地图 API 尚未加载,我应该能够处理这种边缘情况,所以这一切都归结为:如何做到这一点,为什么上述未定义的检查不起作用?

4

1 回答 1

5

试试这个:

function myFunction() {
    if(window.google === undefined) {
        alert("Google Maps didn't load!");
    }

    doSomething();
}

那是因为google被解释为未声明的标识符,而window.google它的属性window可能是也可能undefined不是。

编辑:

您也可以使用!window.google, since是一个对象,google因此不能是null,或其他虚假值。undefined0

于 2013-05-31T15:22:14.777 回答