在Firefox中远程使用Google Maps V3时,“google未定义”
这是我的难题:我有一个使用Google Maps V3和jQuery的页面。 这一切在FF5,Chrome和Safari本地运行良好。
一旦我上传到网站,我得到一个“谷歌未定义”的错误,我尝试使用谷歌对象的第一行
var defaultLocation = new google.maps.LatLng(lat, lng);
它只发生在FF , 只发生在远程 (即,如果我本地加载文件到FF,它运作良好)。 无论是Chrome还是Safari,我的Android和iPod浏览器都显得效果不错。
这是我到目前为止所尝试的:
- 将
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
移至<head>
部分的顶部。 - 移动了所有内容
$(function() {...});
到一个名为initialize()
的函数,并添加<body onload="initialize()">
- 玩脚本和CSS文件的顺序
- 将http://maps.google.com/maps/api/js?sensor=falseurl粘贴到FF地址框中,并validation我收到了合法的脚本
但是,因为这只发生在远程机器上的FF,否则运作良好,我不认为这与我的代码有任何关系。 也许在FF5的加载顺序是拧紧的。 也许它比其他浏览器的networking资源的优先顺序不同。 我现在真的不知道该怎么做。
任何帮助表示赞赏。
家伙
更新:
只是想添加以下事实:在Mac上尝试之前,我尝试了Windows中的FF5,并已复制完全相同的行为。
为了好的措施,我也尝试了苍白的月亮 – 同样的结果。 Chrome 14,Opera 11.50甚至frickin'IE9(这不包括在testing计划中)的工作。 它只是FF5,现在在Mac和Windows 7上,在该页面上失败。
我几次面对'谷歌没有定义'。 可能谷歌脚本有一些问题不能用FF-addon顺利加载。 FF有重新启动选项(如重新启动窗口)帮助>使用加载项禁用重新启动
在使用Gmap3时,我有同样的错误“谷歌未定义”。 问题是我在包含'google'之前join了'gmap3',所以我颠倒了顺序:
<script src="https://maps.googleapis.com/maps/api/js?sensor=false" type="text/javascript"></script> <script src="/assets/gmap3.js?body=1" type="text/javascript"></script>
另一个build议帮助了我:
这是我发生的事情=>我的脚本是在3次工作一次,我正在加载页面,错误是«谷歌没有定义»。
我使用谷歌地图的function是在我的jQuery文档的准备function
$(function(){ //Here was my logic })
我只是简单地添加了这段代码,以确保它的工作:
$(function(){ $(window).load(function(){ //Here is my logic now }); });
它像一个魅力。 如果你想了解文档就绪和窗口加载之间的区别的更多细节,这里有一个很棒的文章: window.onload vs $(document).ready()
就绪事件发生在加载HTML文档之后,而onload事件发生在稍后,当所有内容(例如图像)也被加载时。
onload事件是DOM中的标准事件,而ready事件特定于jQuery。 就绪事件的目的是在文档加载后尽早出现,以便为页面中的元素添加function的代码不必等待所有的内容加载。
尝试使用这个:
<script src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
尝试这个:
<script src="https://maps.googleapis.com/maps/api/js"></script>
它适用于我…重点是,将HTTP更改为HTTPS
为脚本添加types
<script src="https://maps.googleapis.com/maps/api/js" type="text/javascript"></script>
所以重要的部分是types文本/ JavaScript。
从Firefox 23开始,默认情况下会启用混合内容阻止 (本地禁用)。 如果您使用安全连接和一些不安全的API,它也会阻止Google的一些API。
要禁用它,你将不得不点击屏蔽出现在地址栏中,当有一些不安全的内容,设置“禁用保护”,然后你将不得不看在地址栏中的黄色感叹号:(
https://blog.mozilla.org/…/mixed-content-blocking-enabled-in-firefox-23/
您可以随时尝试在APIurl中将https协议replace为https。 如果API也以安全连接的方式提供 – 您将看不到任何警告。
这个对我有用。
我不知道,但这是我最好的build议。
你正在使用jQuery。 所以,而不是设置事件,你真的应该使用$(function(){…}); 做你的初始化。 使用它的原因是,它确保页面上的所有脚本都被加载,并且不仅限于一个init函数,就像使用onload body标签一样。
另外,请确保您的Javascript代码在Google包含之后。 否则,您的代码可能会在创buildGoogle对象之前执行。
我也build议看看这个页面关于事件顺序。
请检查您打电话的订单,您的图书馆,以下订单
-
<script type = "text/javascript" src = "../resources/googleMaps/jquery-ui.js"></script>
-
<script type = "text/javascript" src = "../resources/googleMaps/jquery-ui.min.js"></script>
-
<script type = "text/javascript" src="http://maps.googleapis.com/maps/api/
-
METOD
<script type = "text/javascript" src = "googleMaps/mapa.js"></script>
我遇到这个问题,我只是调整了我的订单。
您可以尝试以下方法:
首先,添加async defer
。 这指定脚本将在脚本可用并且页面完成parsing时asynchronous执行。
其次,将initMap()
函数作为一个callback添加到您的html中的脚本标记中。 这样地图将在document.ready和window.onload之前被初始化:
<script async defer src="{{ 'https://maps.googleapis.com/maps/api/js?key=$key&language='.$language.'®ion='.$country.'&callback=initMap' }}"></script> <script> var map; function initMap() { map = new google.maps.Map(document.getElementById('map'), { center: {lat: -34.397, lng: 150.644}, zoom: 4, disableDefaultUI: false, scrollwheel: false, styles: [{ ... }] }); } </script>
最后,你可以在你的js文件中使用地图对象。
改变了
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=API"> function(){ myMap() } </script>
并做成了
<script type="text/javascript"> function(){ myMap() } </script> <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=API"></script>
有效 :)