Google jspai无法加载,但仅限客户使用

时间:2015-01-30 20:08:01

标签: javascript google-earth-plugin google-loader

我的网站需要使用谷歌地球插件一段时间(我知道,API已被弃用,但我已经坚持了几个月)。我通过包含google.com/jsapi加载它,然后像这样调用google.load

    ...
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">
        google.load("earth", "1", {"other_params": "sensor=false"});
        google.setOnLoadCallback(function () {
            // call some JavaScript to begin initializing the GE plugin
        });
    </script>
</body>
</html>

这适用于多台计算机以及我们公司防火墙内的多个浏览器。它可以从我的家用电脑和同事那里得到很好的效果。家用电脑。但是,当我的客户尝试加载它时,她会收到一条错误消息,指出在google.load(开始的行未定义谷歌。

当然,全局变量google是在www.google.com/jsapi文件的开头定义的,所以可能是该文件没有加载。我最初假设她的公司防火墙阻止了该文件,但当我让她粘贴&#34; https://www.google.com/jsapi&#34;进入她浏览器的地址栏,她说立即加载了一页JavaScript。

浏览器控制台的整个输出是:

Invalid URI. Load of media resource  failed. main.html
ReferenceError: google is not defined main.html:484

我认为无效的URI业务只是因为我们没有favicon.ico文件。

她正在运行Firefox 35.0.1,虽然她说IE发生了同样的错误(她没有提到IE的版本)。

没有要求她安装Firebug,我认为这不可行,我该如何解决这个问题呢?

4 个答案:

答案 0 :(得分:3)

我真的不确定这个假设但是: 可能是,你的第一个脚本加载异步?然后,对于慢速连接(您的客户),会出现此问题(我知道您没有使用异步标记 - 但可能源可以触发加载异步)。

此处要做的最好的事情是确保您使用的Google代码是sync类型并重新部署。

此外https://bugsnag.com/对您来说也是一个非常有趣的工具。只需实施js,您就可以跟踪客户得到的每一个错误。

答案 1 :(得分:1)

按如下方式重新部署代码,

<script type="text/javascript">
   try {
      google.load("earth", "1", {"other_params": "sensor=false"});
      google.setOnLoadCallback(function () {
        // call some JavaScript to begin initializing the GE plugin
      });
    } catch (e) {
        $.post('http://<your-remote-debug-script-or-service>',e)
    }
</script>

然后,当您的客户遇到错误时,完整的详细信息将直接发送到您的服务器,您可以根据需要进行故障排除。

答案 2 :(得分:0)

它可能就像客户端浏览器阻止javascript被执行一样简单。也许专门阻止你的域名或类似的疯狂。

答案 3 :(得分:0)

您是否可以尝试加载google jsapi的外部脚本,然后将代码放入回调中以确保其已加载?

<script type="text/javascript">

function loadScript(url, callback){

    var script = document.createElement("script")
    script.type = "text/javascript";

    if (script.readyState){  //IE
        script.onreadystatechange = function(){
            if (script.readyState == "loaded" ||
                    script.readyState == "complete"){
                script.onreadystatechange = null;
                callback();
            }
        };
    } else {  //Others
        script.onload = function(){
            callback();
        };
    }

    script.src = url;
    document.getElementsByTagName("head")[0].appendChild(script);
}

loadScript("https://www.google.com/jsapi", function(){
    google.load("earth", "1", {"other_params": "sensor=false"});
    google.setOnLoadCallback(function () {
        // call some JavaScript to begin initializing the GE plugin
    });
});
</script>

(从http://www.nczonline.net/blog/2009/07/28/the-best-way-to-load-external-javascript/修改)

您可能还想查看jsapi自动加载以最小化加载的内容,但使用较旧的库可能会变得棘手。 https://developers.google.com/loader/