在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浏览器都显得效果不错。

这是我到目前为止所尝试的:

  1. <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>移至<head>部分的顶部。
  2. 移动了所有内容$(function() {...}); 到一个名为initialize()的函数,并添加<body onload="initialize()">
  3. 玩脚本和CSS文件的顺序
  4. 将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议看看这个页面关于事件顺序。

http://dean.edwards.name/weblog/2005/09/busted/

请检查您打电话的订单,您的图书馆,以下订单

  1. <script type = "text/javascript" src = "../resources/googleMaps/jquery-ui.js"></script>

  2. <script type = "text/javascript" src = "../resources/googleMaps/jquery-ui.min.js"></script>

  3. <script type = "text/javascript" src="http://maps.googleapis.com/maps/api/

  4. 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.'&region='.$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> 

有效 :)