2010-12-07 16 views
7

He creado una API de Google Map y me gustaría abrirla en una nueva pestaña (Ventana). ¿Puedo saber qué pasa con mi código? Puedo abrir una pestaña nueva, pero no puedo mostrar el mapa de Google.Abra el mapa de google en una nueva ventana.

A continuación se muestra mi código. ¡Gracias!

function newWindow() 
    { 
    var myLatlng = new google.maps.LatLng(0.7,40); 
    var myOptions = 
     { 
     zoom: 2, 
     center: myLatlng, 
     mapTypeId: google.maps.MapTypeId.HYBRID 
     }; 
    map = new google.maps.Map(document.getElementById("map_canvas"), 
    myOptions); 
    } 

<A HREF="" onclick="window.open('javascript:newWindow()')" >New Map(In new window)</A> 

Respuesta

5
  1. window.open() toma una URL como parámetro. Su función newWindow() no devuelve nada, y mucho menos una URL.
  2. Debe llamar al window.open() con una URL válida ingresada, que se encarga de configurar el mapa.
  3. Si va a conectar un controlador de eventos en línea, hacer las cosas bien:

    <a onclick="window.open('some_url_here'); return false;">...</a>.

Dicho esto, en el interés de Javascript no intrusivo, que realmente debe adjuntar JS controladores de eventos utilizando su código JS externo.


¿Quizás desea abrir su mapa en un cuadro de diálogo modal en su lugar?

+0

¡Oh bien, gracias! Anteriormente me encontré con un sitio web que hace algo como onclick = "window.open ('javascript: function()'); Por eso pensé que podía hacer funcionar dentro de window.open. Gracias por resolverme. –

+0

@ KennC: eso solo funcionó porque esa función devolvió una URL. Además, estoy seguro de que no significa 'onclick =" window.open ('javascript: function()'); 'porque' function' es una palabra clave en JS :) ... _also_, ya estás en un contexto JS cuando escribes 'onclick ="/* js context here */"', por lo que escribir 'javascript: function()' dentro de eso es en realidad un error de sintaxis. –

+0

Oh, ya veo. Yah y yo no nos referimos a la palabra función. =) Gracias de nuevo –

3

la variable de window.open es la URL

<a href="#" onclick="window.open('stackoverflow.com')">New Map(In new window)</a> 
+0

¡Oh bien! Célebre. ¡Gracias! –

1

En realidad, existe una solución para su problema. El primer error aquí es que el contexto en una nueva ventana es diferente de la ventana anterior.

var w = window.open('', '_blank', options); 

w es un objeto de ventana diferente de la ventana. La URL vacía crea una página vacía "sobre: ​​en blanco", y como no hay dominio, tiene acceso de lectura/escritura a w.document. Así que algo como esto:

function newWindowMap(latitude, longitude) { 
    var w = window.open('', '_blank'); //you must use predefined window name here for IE. 
    var head = w.document.getElementsByTagName('head')[0]; 
    //Give some information about the map: 
    w.document.createElement('input'); 
    //Place ID, value and type='hidden' here 
    var loadScript = w.document.createElement('script'); 
    loadScript.src = '...'; //Link to script that load google maps from hidden elements. 
    var googleMapScript = w.document.createElement('script'); 
    googleMapScript.src = '...'; //Link to google maps js, use callback=... URL parameter to setup the calling function after google maps load. 
    head.appendChild(loadScript); 
    head.appendChild(googleMapScript); 
} 

Ahora todo el CargarScript habrá en el contexto de la nueva ventana y mapa de google llamará a una función de ella, cuando se termina de cargar. Puede crear un nuevo div dinámicamente y usarlo para crear un mapa.

Cuestiones relacionadas