Google jspai无法加载,但仅适用于客户



我的网站需要使用谷歌地球插件更长的时间(我知道,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 未在以 google.load( 开头的行上定义。

当然,全局变量 google 是在文件 www.google.com/jsapi 的开头定义的,所以大概该文件没有加载。我最初认为她的公司防火墙阻止了该文件,但是当我要求她将"https://www.google.com/jsapi"粘贴到浏览器的地址栏中时,她说立即加载了一页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,我认为这不可行,我该如何解决这个问题?

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

这里最好的办法是确保您使用的 Google 代码是sync类型的代码并重新部署。

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

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

<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>

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

它可以像客户端浏览器阻止javascript执行一样简单。也许专门阻止您的域或类似疯狂的事情。

你能尝试一个加载谷歌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/

最新更新