简体   繁体   中英

Google Maps script breaks Safari TypeError: Result of expression 'document.body' [null] is not an object

I'm displaying google maps in my web page and it works correctly in all browsers except for Safari.

Safri whites out the page and the JS error says:

TypeError: Result of expression 'document.body' [null] is not an object.  maps.google.com/maps/api/js?sensor=true&region=nz&async=2&callback=initializeConfigMap:11
TypeError: Result of expression 'a' [null] is not an object.  maps.gstatic.com/intl/en_us/mapfiles/api-3/5/11/main.js:30

The code this seems to be coming from is a script I'm linking to from google using this line:

$.getScript("http://maps.google.com/maps/api/js?sensor=true&region=nz&async=2&callback=initializeConfigMap", function () {});

The script looks like this:

window.google = window.google || {};
google.maps = google.maps || {};
(function() {

    function getScript(src) {
        var s = document.createElement('script');
        s.src = src;
        document.body.appendChild(s);
    }

    var modules = google.maps.modules = {};
    google.maps.__gjsload__ = function(name, text) {
        modules[name] = text;
    };

    google.maps.Load = function(apiLoad) {
        delete google.maps.Load;
        apiLoad([null,[[["http://mt0.googleapis.com/vt?lyrs=m@158\u0026src=api\u0026hl=en-US\u0026","http://mt1.googleapis.com/vt?lyrs=m@158\u0026src=api\u0026hl=en-US\u0026"],null,null,null,null,"m@158"],[["http://khm0.googleapis.com/kh?v=88\u0026hl=en-US\u0026","http://khm1.googleapis.com/kh?v=88\u0026hl=en-US\u0026"],null,null,null,1,"88"],[["http://mt0.googleapis.com/vt?lyrs=h@158\u0026src=api\u0026hl=en-US\u0026","http://mt1.googleapis.com/vt?lyrs=h@158\u0026src=api\u0026hl=en-US\u0026"],null,null,"imgtp=png32\u0026",null,"h@158"],[["http://mt0.googleapis.com/vt?lyrs=t@127,r@158\u0026src=api\u0026hl=en-US\u0026","http://mt1.googleapis.com/vt?lyrs=t@127,r@158\u0026src=api\u0026hl=en-US\u0026"],null,null,null,null,"t@127,r@158"],null,[[null,0,7,7,[[[330000000,1246050000],[386200000,1293600000]],[[366500000,1297000000],[386200000,1320034790]]],["http://mt0.gmaptiles.co.kr/mt?v=kr1.14\u0026hl=en-US\u0026","http://mt1.gmaptiles.co.kr/mt?v=kr1.14\u0026hl=en-US\u0026"]],[null,0,8,9,[[[330000000,1246050000],[386200000,1279600000]],[[345000000,1279600000],[386200000,1286700000]],[[348900000,1286700000],[386200000,1293600000]],[[354690000,1293600000],[386200000,1320034790]]],["http://mt0.gmaptiles.co.kr/mt?v=kr1.14\u0026hl=en-US\u0026","http://mt1.gmaptiles.co.kr/mt?v=kr1.14\u0026hl=en-US\u0026"]],[null,0,10,19,[[[329890840,1246055600],[386930130,1284960940]],[[344646740,1284960940],[386930130,1288476560]],[[350277470,1288476560],[386930130,1310531620]],[[370277730,1310531620],[386930130,1320034790]]],["http://mt0.gmaptiles.co.kr/mt?v=kr1.14\u0026hl=en-US\u0026","http://mt1.gmaptiles.co.kr/mt?v=kr1.14\u0026hl=en-US\u0026"]],[null,3,7,7,[[[330000000,1246050000],[386200000,1293600000]],[[366500000,1297000000],[386200000,1320034790]]],["http://mt0.gmaptiles.co.kr/mt?v=kr1p.12\u0026hl=en-US\u0026","http://mt1.gmaptiles.co.kr/mt?v=kr1p.12\u0026hl=en-US\u0026"]],[null,3,8,9,[[[330000000,1246050000],[386200000,1279600000]],[[345000000,1279600000],[386200000,1286700000]],[[348900000,1286700000],[386200000,1293600000]],[[354690000,1293600000],[386200000,1320034790]]],["http://mt0.gmaptiles.co.kr/mt?v=kr1p.12\u0026hl=en-US\u0026","http://mt1.gmaptiles.co.kr/mt?v=kr1p.12\u0026hl=en-US\u0026"]],[null,3,10,null,[[[329890840,1246055600],[386930130,1284960940]],[[344646740,1284960940],[386930130,1288476560]],[[350277470,1288476560],[386930130,1310531620]],[[370277730,1310531620],[386930130,1320034790]]],["http://mt0.gmaptiles.co.kr/mt?v=kr1p.12\u0026hl=en-US\u0026","http://mt1.gmaptiles.co.kr/mt?v=kr1p.12\u0026hl=en-US\u0026"]]],[["http://cbk0.googleapis.com/cbk?","http://cbk1.googleapis.com/cbk?"]],[["http://khmdb0.googleapis.com/kh?v=40\u0026hl=en-US\u0026","http://khmdb1.googleapis.com/kh?v=40\u0026hl=en-US\u0026"],null,null,null,null,"40"],[["http://mt0.googleapis.com/mapslt?hl=en-US\u0026","http://mt1.googleapis.com/mapslt?hl=en-US\u0026"]],[["http://mt0.googleapis.com/mapslt/ft?hl=en-US\u0026","http://mt1.googleapis.com/mapslt/ft?hl=en-US\u0026"]],[["http://mt0.googleapis.com/vt?hl=en-US\u0026","http://mt1.googleapis.com/vt?hl=en-US\u0026"]]],["en-US","NZ",null,0,null,"http://maps.google.com","http://maps.gstatic.com/intl/en_us/mapfiles/","http://csi.gstatic.com","https://maps.googleapis.com","http://maps.googleapis.com"],["http://maps.gstatic.com/intl/en_us/mapfiles/api-3/5/11","3.5.11"],[3021543403],1.0,null,null,null,null,1,"initializeConfigMap",null,null,0,"http://khm.googleapis.com/mz?v=88\u0026"], loadScriptTime);
    };
    var loadScriptTime = (new Date).getTime();
    getScript("http://maps.gstatic.com/intl/en_us/mapfiles/api-3/5/11/main.js");
})();    

I believe this might be the line causing problems:

document.body.appendChild(s);

Any ideas?

This change solved some loading issues in my case on safari and ie7 :

  • Try adding the version in the script url : &v=3.7 which is the frozen version. Avoid using the 3.exp version which causes some loading troubles.

I found a solution to this one. Try to load the google Maps API Asynchronously. worked for me

Asynchronously Loading the API

i faced the same problem while working on OS X 10.10 and Safari. Solved it by adding async and defer to the script tag.

 <script async defer src="https://maps.googleapis.com/maps/api/js?key=...."/> 

Heres what the documentation has to say:

Synchronously Loading the API

In the script tag that loads the Maps API, it is possible to omit the async attribute and the callback parameter. This will cause the loading of the API to block until the API is downloaded.

This will probably slow your page load. But it means you can write subsequent script tags assuming that the API is already loaded.

Other than that, you should certainly make sure that the div has a height given to it. default height of a div is 0 if not specified, this will hide the map even though it loads.

good luck.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM