Estou tentando usar a API do Google MAP v3 com o seguinte código.
<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>
Quando executo esse código, o navegador diz isso.
TypeError não capturado: Não é possível ler a propriedade 'offsetWidth' de null
Não faço ideia, pois sigo a orientação dada neste tutorial .
Faz alguma ideia?
fonte
Para outras pessoas que ainda podem ter esse problema , mesmo depois de tentar as recomendações acima, o uso de um seletor incorreto para a tela do mapa na função de inicialização pode causar o mesmo problema, pois a função está tentando acessar algo que não existe. Verifique duas vezes se o ID do seu mapa corresponde à sua função de inicialização e se o seu HTML ou esse mesmo erro podem ser exibidos.
Em outras palavras, verifique se seus IDs correspondem. ;)
fonte
Você também pode receber esse erro se não especificar
center
ouzoom
nas opções do seu mapa.fonte
o google usa
id="map_canvas"
eid="map-canvas"
nas amostras, verifique novamente e verifique novamente o id: Dfonte
Ano, a resposta de geocodezip está correta. Então, mude seu código assim: (se você ainda estiver com problemas, ou talvez outra pessoa no futuro)
fonte
Só para adicionar meu cenário de falha ao fazer isso funcionar. Eu tinha um
<div id="map>
no qual estava carregando o mapa:e a div foi ocultada inicialmente e não tinha explicitamente os valores de largura e altura definidos, portanto o tamanho era
width x 0
. Depois de definir o tamanho dessa div em CSS assimtudo funcionou! Espero que isso ajude alguém.
fonte
Para ainda mais pessoas que ainda podem estar tendo esse problema, eu estava usando uma
<div id="map1" />
tag de fechamento automático , e a segunda div não estava aparecendo e não parecia estar no domínio. Assim que eu mudei para duas tags de abertura e fechamento<div id="map1"></div>
, funcionou. hthfonte
Também tome cuidado para não escrever
corrigir:
fonte
Eu tinha aspas simples na minha
e os substituiu por aspas duplas
Isso fez o truque para mim.
fonte
Alterar o ID (em todos os 3 lugares) de "map-canvas" para "map" o corrigiu para mim, mesmo que eu tivesse certeza de que os IDs eram os mesmos, a div tinha largura e altura, e o código não era funcionando até após a chamada de carregamento da janela. Não é o traço; parece não funcionar com outro ID que não seja "map".
fonte
Além disso, verifique se você não está colocando o símbolo de hash (#) dentro do seletor em um
declaração. Não é um jQuery. Apenas um lembrete rápido para alguém com pressa.
fonte
Eu tive o mesmo problema, mas o problema era que o zoom não estava definido no objeto de opções fornecido ao Google Maps.
fonte
Se você estiver criando vários mapas em um loop, se um único elemento DOM do mapa não existir, ele quebrará todos eles. Primeiro, verifique se o elemento DOM existe antes de criar um novo objeto Map.
fonte
Se você estiver usando Webforms do asp.net e estiver registrando o script no código atrás de uma página usando uma página mestre, não se esqueça de usar o ID do cliente do elemento do mapa (vb.net):
fonte
Para resolvê-lo, você precisa adicionar
async defer
ao script.Deve ser assim:
Veja aqui o significado do adiamento assíncrono.
Como você chamará uma função a partir do arquivo js principal, também deseje ter certeza de que é após a onde você carrega o script principal.
fonte
Certifique-se de incluir o
&libraries=places
parâmetro da biblioteca do Google Places ao carregar a API pela primeira vez.Por exemplo:
fonte
Eu sei que estou um pouco atrasado para a festa, só queria acrescentar que o erro também pode acontecer quando a div não existe na página. Você também pode verificar se a div existe primeiro antes de carregar a chamada de função do Google Maps. Algo como
fonte
E no controlador
use $ scope.init = function () {...} em vez de google.maps.event.addDomListener (janela, "carregar", init) {...}
Espero que isso ajude você.
fonte
Na verdade, a maneira mais fácil de corrigir isso é mover o seu objeto antes que o código Javascript funcionasse para mim. Eu acho que na sua resposta objeto é carregado após o código javascript.
fonte
No meu caso, esses tipos de problemas foram resolvidos usando
defer
https://developer.mozilla.org/en/docs/Web/HTML/Element/script<script src="<your file>.js" defer></script>
Você precisa levar em conta o suporte dos navegadores a essa opção (não vi problemas)
fonte
Verifique se você não está substituindo
window.self
Meu problema: criei um componente e escrevi em
self = this
vez de varself = this
. Se você não usar a palavra-chavevar
, o JS colocará essa variável no objeto da janela, então substitui owindow.self
que causou esse erro.fonte
Esta é uma edição de uma postagem excluída anteriormente para conter o conteúdo da resposta vinculada, na própria resposta. O objetivo de republicar esta resposta é funcionar como um PSA para usuários do React 0.9+ que também se depararam com esse problema.
postagem editada original
Também recebi esse erro ao usar o ReactJS ao seguir esta postagem do blog . O comentário de sahat aqui ajudou - veja o conteúdo do comentário de sahat abaixo.
fonte
Minha falha foi usar
como uma opção, em vez da opção correta
fonte
adicione adiamento assíncrono no início da chamada de chave da API do mapa.
fonte
No caso em que eu estava lidando, a div do mapa era renderizada condicionalmente, dependendo se o local estava sendo tornado público. Se você não tiver certeza se a div da tela do mapa estará na página, verifique se você
document.getElementById
está retornando um elemento e invoque o mapa apenas se estiver presente:fonte
Aqui o problema era o link da API sem o
key
parâmetro:Dessa forma, funciona bem.
fonte