我的网站需要使用谷歌地球插件更长的时间(我知道,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/