我的网站需要使用谷歌地球插件一段时间(我知道,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,我认为这不可行,我该如何解决这个问题呢?
答案 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/