I can't get my map running using the GoogleMaps API V3. The map does not load. I would expect the map to appear in the div with the id gisMap
but in the Chrome Debugger I get the message:
Uncaught InvalidValueError: initMap is not a function
Javascript
var map;
function initMap() {
// Enabling new cartography and themes
google.maps.visualRefresh = true;
// Setting starting options
var mapOptions = {
center: new google.maps.LatLng(39.9078, 32.8252),
zoom: 10,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
// Getting Map DOM Element
var mapElement = document.getElementById('gisMap');
// Creating a map with DOM element
map = new google.maps.Map(mapElement, mapOptions);
}
Bundle.js (excerpt)
(...)
module.exports = Vue;
}).call(this,require('_process'))
},{"_process":1}],3:[function(require,module,exports){
'use strict';
var map;
function initMap() {
// Enabling new cartography and themes
google.maps.visualRefresh = true;
// Setting starting options
var mapOptions = {
center: new google.maps.LatLng(39.9078, 32.8252),
zoom: 10,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
// Getting Map DOM Element
var mapElement = document.getElementById('gisMap');
// Creating a map with DOM element
map = new google.maps.Map(mapElement, mapOptions);
}
},{}],4:[function(require,module,exports){
'use strict';
var Vue = require('vue');
new Vue({});
(...)
HTML
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>MFServer Test</title>
<link rel="stylesheet" href="/css/app.css">
</head>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">MFDispo</a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Start</a></li>
<li><a href="#about">GIS</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
<body id="app">
<div class="pageWrapper">
<div id="gisMap"></div>
<div id="content"></div>
</div>
<script src="/js/bundle.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha256-KXn5puMvxCw+dAYznun+drMdG1IFl3agK0p/pqT9KAo= sha512-2e8qq0ETcfWRI4HJBzQiA3UoyFk6tbNyG+qSaIBZLyW9Xf3sWZHN/lxe9fTh1U45DpPf07yj94KsUHHWe4Yk1A==" crossorigin="anonymous"></script>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBDucSpoWkWGH6n05GpjFLorktAzT1CuEc&callback=initMap" async defer></script>
</body>
</html>
SCSS
@import "node_modules/bootstrap-sass/assets/stylesheets/bootstrap";
@import "partials/forms";
html, body {
height: 100%;
padding-top: 25px;
}
.pageWrapper {
background-color: red;
height:100%;
width: 100%;
}
#gisMap {
height: 100%;
width: 50%;
background-color: green;
}
Clear the app's cache & data On your Android phone or tablet, open the Settings app . Tap Apps & notifications. Follow the steps on your device to find the Maps app. After you select the app, storage & cache options should be available.
Unless a valid API key is present, the map will be displayed in a lower resolution and will have a watermark on it. If the credit card linked to the account is invalid or the number of free map views is surpassed, the "This Page Can't Load Google Maps Correctly" error will show up.
If the Google Maps site is not loading on the Chrome browser then the best option is to change the DNS. Changing the DNS will not affect web speed but it will only change the the the IP directory from where the data is collected. This can fix most of the issues with Google Maps; Open Chrome Settings.
Make sure that initMap function is visible from the global scope or the parameter passed as callback to google maps.js is properly namespaced. In your case, the quickest solution will be replacing:
function initMap(){
//..
}
to:
window.initMap = function(){
//...
}
or namespace version:
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBDucSpoWkWGH6n05GpjFLorktAzT1CuEc&callback=YOUR.NAMESPACE.initMap" async defer></script>
//Edit:
I see that in your code snippet you use some async module loading (require.js?) and the code in which you create window.initMap function does not get executed unless you call the module that contains this declaration. So you have not fulfilled the first condition that I've mentioned - the initMap must be visible from the global scope before you call google maps.js.
Simply make sure that the script element with the initMap function in it comes before the google maps api script element in your HTML. Also, the async defer attributes included in Google's examples may be causing the problem. Simply remove those attributes.
<script src='/js/script.js'></script>
<script src="https://maps.googleapis.com/maps/api/js?key=YOURKEY&callback=initMap"></script>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With