检查未定义时,“ReferenceError:找不到变量:google”

时间:2013-05-31 15:20:21

标签: javascript ios jquery-mobile google-maps-api-3 cordova

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

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

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

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

    doSomething();
}

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

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

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

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

1 个答案:

答案 0 :(得分:5)

请改为尝试:

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

    doSomething();
}

这是因为google被解释为非声明的标识符,而window.googlewindow的属性,可能是undefined

编辑:

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