J'essaie d'utiliser l'API Google MAP v3 avec le code suivant.
<h2>Topology</h2>
<script src="https://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="{% url css_media 'tooltip.topology.css' %}" />
<link rel="stylesheet" type="text/css" href="{% url css_media 'tooltip.css' %}" />
<style type="text/css" >
#map_canvas {
width:300px;
height:300px;
}
</style>
<script type="text/javascript">
var latlng = new google.maps.LatLng(-34.397, 150.644);
var myOptions = {
zoom: 8,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
</script>
<div id="map_canvas"> </div>
Lorsque j'exécute ce code, le navigateur le dit.
TypeError non capturé: impossible de lire la propriété 'offsetWidth' de null
Je n'en ai aucune idée, puisque je suis la direction donnée dans ce tutoriel .
Avez-vous une idée?
la source
Pour d'autres qui pourraient encore avoir ce problème , même après avoir essayé les recommandations ci-dessus, l'utilisation d'un sélecteur incorrect pour votre canevas de carte dans la fonction d'initialisation peut provoquer ce même problème car la fonction tente d'accéder à quelque chose qui n'existe pas. Vérifiez que votre ID de carte correspond dans votre fonction d'initialisation et votre code HTML ou cette même erreur peut être levée.
En d'autres termes, assurez-vous que vos identifiants correspondent. ;)
la source
Vous pouvez également obtenir cette erreur si vous ne spécifiez pas
center
ouzoom
dans vos options de carte.la source
google utilise
id="map_canvas"
etid="map-canvas"
dans les exemples, revérifiez et revérifiez l'id: Dla source
Année, la réponse de geocodezip est correcte. Alors changez votre code comme ceci: (si vous avez toujours des ennuis, ou peut-être quelqu'un d'autre à l'avenir)
la source
Juste pour ajouter mon scénario d'échec pour que cela fonctionne. J'avais un
<div id="map>
dans lequel je chargeais la carte avec:et le div était initialement caché et il n'y avait pas explicitement de valeurs de largeur et de hauteur définies, donc sa taille était
width x 0
. Une fois que j'ai défini la taille de ce div en CSS comme cecitout a fonctionné! J'espère que cela aide quelqu'un.
la source
Pour encore plus d'autres qui pourraient encore avoir ce problème, j'utilisais une
<div id="map1" />
balise à fermeture automatique , et le deuxième div ne s'affichait pas et ne semblait pas être dans le dom. dès que je l'ai changé en deux balises d'ouverture et de fermeture,<div id="map1"></div>
cela a fonctionné. hthla source
Veillez également à ne pas écrire
correct:
la source
J'avais des guillemets simples dans mon
et les a remplacés par des guillemets doubles
Cela a fait l'affaire pour moi.
la source
Changer l'ID (dans les 3 endroits) de "map-canvas" en "map" l'a corrigé pour moi, même si je m'étais assuré que les ID étaient les mêmes, la div avait une largeur et une hauteur, et le code n'était pas en cours d'exécution jusqu'à après l'appel de chargement de fenêtre. Ce n'est pas le tiret; il ne semble pas fonctionner avec un autre identifiant que "map".
la source
Assurez-vous également que vous ne placez pas de symbole de hachage (#) dans votre sélecteur
déclaration. Ce n'est pas un jQuery. Juste un petit rappel pour quelqu'un pressé.
la source
J'ai eu le même problème, mais le problème était que le zoom n'était pas défini dans l'objet d'options donné à Google Maps.
la source
Si vous créez plusieurs cartes dans une boucle, si un seul élément DOM de carte n'existe pas, il les brise toutes. Tout d'abord, vérifiez que l'élément DOM existe avant de créer un nouvel objet Map.
la source
Si vous utilisez des formulaires Web asp.net et que vous enregistrez le script dans le code derrière une page à l'aide d'une page maître, n'oubliez pas d'utiliser l'ID client de l'élément de carte (vb.net):
la source
Pour le résoudre, vous devez ajouter
async defer
au script.Cela devrait être comme ceci:
Voir ici le sens de différer asynchrone.
Puisque vous appellerez une fonction à partir du fichier js principal, vous devez également vous assurer que c'est après celle où vous chargez le script principal.
la source
Assurez-vous d'inclure la bibliothèque des lieux
&libraries=places
paramètre de lors du premier chargement de l'API.Par exemple:
la source
Je sais que je suis un peu en retard à la fête, je voulais juste ajouter que l'erreur peut également se produire lorsque le div n'existe pas dans la page. Vous pouvez également vérifier si le div existe avant de charger l'appel de la fonction google maps. Quelque chose comme
la source
Et dans le contrôleur
utilisez $ scope.init = function () {...} au lieu de google.maps.event.addDomListener (window, "load", init) {...}
J'espère que ceci vous aidera.
la source
En fait, le moyen le plus simple de résoudre ce problème est de déplacer votre objet avant que le code Javascript ne fonctionne. Je suppose que votre objet de réponse est chargé après le code javascript.
la source
Dans mon cas, ce type de problèmes a été résolu à l'aide de
defer
https://developer.mozilla.org/en/docs/Web/HTML/Element/script<script src="<your file>.js" defer></script>
Vous devez cependant prendre en compte la prise en charge par les navigateurs de cette option (je n'ai pas vu de problèmes)
la source
Vérifiez que vous ne remplacez pas
window.self
Mon problème: j'avais créé un composant et écrit
self = this
au lieu de varself = this
. Si vous n'utilisez pas le mot-clévar
, JS mettra cette variable sur l'objet fenêtre, j'ai donc écraséwindow.self
ce qui a causé cette erreur.la source
Il s'agit d'une modification d'une publication précédemment supprimée pour contenir le contenu de la réponse liée, dans la réponse elle-même. Le but de la republication de cette réponse est de fonctionner comme un PSA pour les utilisateurs de React 0.9+ qui sont également tombés sur ce problème.
message édité d'origine
A également obtenu cette erreur lors de l'utilisation de ReactJS tout en suivant ce billet de blog . Le commentaire de sahat ici a aidé - voir le contenu du commentaire de sahat ci-dessous.
la source
Mon échec a été d'utiliser
en option, plutôt que l'option correcte
la source
ajouter un report asynchrone au début de l'appel de la clé API de la carte.
la source
Dans un cas que je traitais, le div de la carte a été rendu sous condition selon que l'emplacement était rendu public. Si vous ne pouvez pas être sûr que le div du canevas de carte sera sur la page, vérifiez simplement que votre
document.getElementById
retourne un élément et n'appelez la carte que si elle est présente:la source
Ici, le problème était le lien API sans le
key
paramètre:De cette façon, ça marche bien.
la source