远程在 Firefox 中使用 Google Maps V3 时出现“未定义 google”

Posted

技术标签:

【中文标题】远程在 Firefox 中使用 Google Maps V3 时出现“未定义 google”【英文标题】:"google is not defined" when using Google Maps V3 in Firefox remotely 【发布时间】:2011-10-03 09:47:58 【问题描述】:

这是我的难题: 我有一个使用 Google Maps V3 和 jQuery 的页面。它在 FF5、Chrome 和 Safari 中本地运行良好。

上传到网站后,我在尝试使用 google 对象的第一行收到“未定义 google”错误

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 文件顺序播放 将 URL http://maps.google.com/maps/api/js?sensor=false 粘贴到 FF 地址框中并验证我得到的是合法脚本

但由于这只发生在远程机器上的 FF 中并且在其他情况下运行良好,我认为这与我的代码没有任何关系。也许FF5中的加载顺序被搞砸了。也许它对网络资源的优先级与其他浏览器不同。我现在真的不知道该怎么做。

任何帮助表示赞赏。 伙计

更新: 只是想添加以下事实:在 Mac 上尝试了上一个之后,我在 Windows 中尝试了 FF5,并复制了完全相同的行为。 为了更好地衡量,我也尝试了 Pale Moon - 相同的结果。 Chrome 14、Opera 11.50 甚至 frickin' IE9(未包含在测试计划中)都可以正常工作。它只是 FF5,现在在 Mac 和 Windows 7 上,在那个页面上都失败了。

【问题讨论】:

@thephpdeveloper +1 @op:你有网址吗? firebug 报告了这个? @the 当然,直到 Jon Skeet 或 Chuck Norris unset google。 @deceze:在安全问题上错过 Bruce Schneier 是一种侮辱。 :) @naveen 是的,我用 Firebug 发现了这一点(“参考错误:未定义谷歌”。我很欣赏 Chuck Norris 的笑话,就像下一个遇到无法解释的问题的人一样,但是...... :) 我遇到了同样的问题。如果我将谷歌脚本放入一个简单的 html 中,它可以工作,但如果我放入我的网页(aspx),它就不起作用。我得到错误:谷歌没有定义。看我的剧本。我把我的脚本放在第一行这样:<asp:Content ContentPlaceHolderID="ScriptRegion" runat="server"> <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=my_key" async defer></script> 【参考方案1】:

我不确定,但这是我最好的建议。

您正在使用 jQuery。因此,您应该真正使用 $(function() ... ); 而不是设置事件做你的初始化。使用它的原因是它确保页面上的所有脚本都已加载,并且您不会像使用 onload body 标记那样仅限于一个 init 函数。

另外,请确保您的 Javascript 代码位于 Google 包含之后。否则,您的代码可能会在创建 Google 对象之前执行。

我还建议您查看有关事件顺序的此页面。

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

【讨论】:

Paul,我已经在使用 $(function()) 作为我的加载函数。我的 JS 代码在 Google 包含之后很好。我实际上将它移到了顶部,甚至在 jQuery 包含之上 - 不高兴。【参考方案2】:

我多次遇到“谷歌未定义”。 可能谷歌脚本有一些问题不能用 FF-addon 很好地加载 顺便提一句。 FF 有重启选项(如窗口重启) 帮助 > 禁用附加组件后重新启动

【讨论】:

干得好!我实际上设法找到了导致问题的附加组件!它被称为“断开连接”,它可能会故意篡改 Google 库。有趣的是,我也在 Chrome 中安装了 Disconnect,尽管没有问题。仍然 - 好答案! AdBlock 似乎也屏蔽了 Google API。 很棒的答案,减轻了我的头痛。 您可以在 chrome 中使用新的隐身窗口和在 firefox 中使用新的私有窗口进行测试【参考方案3】:

试试这个:

<script src="http://maps.googleapis.com/maps/api/js?sensor=false"></script> 

【讨论】:

你写的和我的第 1 步有什么区别? 这个答案仍然有效 在您的页面&lt;script src="https://maps.googleapis.com/maps/api/js" async defer&gt;&lt;/script&gt; 上包含 GMap 的新方法会导致问题,因为它的加载将被延迟,以免成为阻塞资源。这有一种尴尬的可能性,即在 GMaps 初始化之前将包含其他脚本。因此,上述解决方案是正确的。谢谢你。【参考方案4】:

我在使用 Gmap3 时遇到了同样的错误“谷歌未定义”。问题是我在包含“google”之前包含了“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>

【讨论】:

【参考方案5】:

从 Firefox 23 开始,默认设置了启用混合内容阻止(本地禁用)。如果您使用安全连接和一些不安全的 API,它也会阻止来自 Google 的一些 API。

要禁用它,当有一些不安全的内容时,您必须单击位置栏中出现的屏蔽,设置“禁用保护”,然后您必须查看位置栏中的黄色感叹号:(

https://blog.mozilla.org/.../mixed-content-blocking-enabled-in-firefox-23/

您也可以尝试在 API url 中将 http 协议替换为 https。如果 API 也在安全连接中提供 - 您将不会看到任何警告。

它对我有用。

【讨论】:

【参考方案6】:

试试这个:

<script src="https://maps.googleapis.com/maps/api/js"></script>

它对我有用... 关键是,将 HTTP 更改为 HTTPS

【讨论】:

【参考方案7】:

另一个对我有帮助的建议:

这是发生在我身上的事情 => 我的脚本在 3 次加载页面时运行一次,错误是 «google is not defined»。

我使用谷歌地图的函数在我的 jQuery 文档的就绪函数中

$(function()
   //Here was my logic
)

我只是添加了这段代码以确保它可以正常工作:

$(function()
   $(window).load(function()
       //Here is my logic now
   );
);

它就像一个魅力。如果您想了解有关文档就绪和窗口加载之间差异的更多详细信息,这里有一篇很棒的文章: window.onload vs $(document).ready()

ready 事件在 HTML 文档加载后发生,而 onload 事件稍后发生,当所有内容(例如图像)也有 已加载。

onload 事件是 DOM 中的标准事件,而 ready 事件 特定于 jQuery。就绪事件的目的是 应该在文档加载后尽早发生,所以 向页面中的元素添加功能的代码不会 必须等待所有内容加载完毕。

【讨论】:

谷歌有一个很好的例子here。他们通过异步和回调解决问题【参考方案8】:

为脚本添加类型

<script src="https://maps.googleapis.com/maps/api/js" type="text/javascript"></script>

所以重要的部分是 text/javascript 类型。

【讨论】:

从上面的答案可以看出,原因实际上是一个广告拦截插件。现代浏览器并不严格要求添加脚本类型。【参考方案9】:

请检查您调用的顺序,您的库,以下顺序

    &lt;script type = "text/javascript" src = "../resources/googleMaps/jquery-ui.js"&gt;&lt;/script&gt;

    &lt;script type = "text/javascript" src = "../resources/googleMaps/jquery-ui.min.js"&gt;&lt;/script&gt;

    &lt;script type = "text/javascript" src="http://maps.googleapis.com/maps/api/

    METOD &lt;script type = "text/javascript" src = "googleMaps/mapa.js"&gt;&lt;/script&gt;

我遇到了这个问题,我刚刚调整了我的订单。

【讨论】:

【参考方案10】:

您可以尝试以下方法:

首先,添加async defer。这指定脚本将在可用并且页面完成解析后立即异步执行。

其次,将initMap() 函数作为回调添加到您的html 内的脚本标记中。这样map会在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 文件中使用地图对象。

【讨论】:

【参考方案11】:

改了

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

成功了:)

【讨论】:

诀窍是'key = API'字段。 Google 地图脚本的加载方式已更改,并且在没有 API 密钥的情况下不再工作。【参考方案12】:

在我的情况下,我通过 http 加载 google 脚本,而我的服务器具有 SSL 并且它通过 https 加载。所以我不得不通过 h​​ttps 加载脚本

【讨论】:

【参考方案13】:

我认为最简单的技巧是:

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR API KEY&callback=initMap">google.maps.event.addDomListener(window,'load', initMap);</script>

当您的应用准备就绪时,它会初始化地图。

Check this.

【讨论】:

【参考方案14】:

而不是这个

var defaultLocation = new google.maps.LatLng(lat, lng);

使用这个

var defaultLocation = new window.google.maps.LatLng(lat, lng);

这对我有用。

【讨论】:

没有区别。【参考方案15】:

如果您在 API 调用中提到了回调函数,您应该将您的谷歌地图代码包装在同名的 JavaScript 函数中。否则你会得到这个错误。

【讨论】:

以上是关于远程在 Firefox 中使用 Google Maps V3 时出现“未定义 google”的主要内容,如果未能解决你的问题,请参考以下文章

使用 Firefox 的 Tensorboard 在 Google Colab 中出现错误 403

Div 未在 Google chrome 中显示(在 Firefox 中显示)[重复]

Google Material Icons(字体)不会在 Mozilla Firefox 中呈现

Google Hangouts支持使用Firefox WebRTC

Google HTML 5 Geolocation“使用我的位置”仅适用于 Firefox

版本更新后如何使用 Google Chrome 和虚拟主机,在 Quantum Firefox 中仍然有效