神秘的'对象在google.load上的IE8中不支持此方法错误

时间:2012-03-17 07:59:43

标签: javascript internet-explorer google-api

我在我的本地搜索应用中使用谷歌搜索JSAPI。除了IE 8之外,所有浏览器都能正常工作。问题出在特定的代码行之后,我的jquery基础对象和google对象都被引用了。

它是一个直接的代码。我能够使用this jsfiddle重现问题。

html代码是

<html>
    <head>
        <title>Test Map</title>
        <script src="http://www.google.com/jsapi?" type="text/javascript"></script>

    </head>
    <body>
        <div id="map_canvas"></div>
    </body>
</html>

和JS

$(function() {
    alert(1);
    google.load('search',1);
    alert($);

    google.setOnLoadCallback(function() {       
        alert(2);
    });
});
google.load('search',1)之后

我收到以下错误

Error: Object doesn't support this property or method

$google

这完全是一场噩梦。我这几个小时没有运气就打架了。这里的任何IE专家都有想法吗?

3 个答案:

答案 0 :(得分:1)

将你的jsFiddle改为“No wrap(body)”并修改你的函数......

//$(function() {
    //alert(1);
    google.load('search',1);
    alert($);

    google.setOnLoadCallback(function() {       
        alert(2);
    });
//});

这里提出的问题几乎相同:Google is not defined using Google Visualization API; possibly jQuery's fault

答案 1 :(得分:1)

此问题是由Google document.write API中的load引起的,类似于this question。脚本被推迟,如下图所示:

enter image description here

要解决此问题,请将代码包装在onload / domready处理程序中。

<script src="http://www.google.com/jsapi?" type="text/javascript"></script>
<script>
// All load-related invocations have to be placed here.
google.load('search',1);
google.setOnLoadCallback(function() {       
    alert(2);
});
</script>

请注意,JSfiddle会将所有内容放置在<body>标记的左上角。因此,JSFiddle中代码的简单复制粘贴将无法显示正确的结果。

答案 2 :(得分:0)

我遇到了同样的问题。这是决议。

如果你想在JQuery中使用google visualization api。请按照以下方法

<script type="text/javascript">
//Load the Google visualization library
google.load("visualization", "1.1", {packages:["bar"]});
$(document).ready(function() {
     google.setOnLoadCallback(function () {
        $('#Search').click(sendAndDraw);
     });

     $("#Search").click(function (e) {
     var data = google.visualization.arrayToDataTable([
         ['Technology', 'Beginner', 'Intermediate', 'Expert'],
         ['Java', 10, 40, 20],
         ['DOT NET', 11, 46, 25],
         ['Mainframe', 66, 11, 30],
         ['Oracle', 10, 50, 30]
       ]);


    var options = {
      chart: {
        title: 'Management Reports',
        subtitle: 'Classification of resources',
      }
    };

    var chart = new google.charts.Bar(document.getElementById('chart_div'));

    chart.draw(data, options);

});