Una tarea simple en JavaScript para abrir una ventana nueva y la escritura en el interior. Pero tengo que escribir en un elemento de dom, un div con un ID.

var novoForm = window.open("somform.html", "wFormx", "width=800,height=600,location=no,menubar=no,status=no,titilebar=no,resizable=no,");

Que yo trate de algo…

var w = novoForm.innerWidth;
var h = novoForm.innerHeight;
novoForm.document.getElementById("monitor").innerHTML = 'Janela: '+w+' x '+h;

Lo hice para ver si el objeto «novoForm» es válido. Pero nada está escrito en el «monitor» div. Yo también trate de usar el evento onload sin éxito. Me pregunto si alguna restricción de seguridad o me estoy perdiendo algo…

InformationsquelleAutor Gustavo | 2013-04-08

3 Comentarios

  1. 8

    Que he hecho bien, pero hacer necesita estar seguro de que el uso de onload (o encuesta), debido a que se toma un momento para que la página se cargue en la ventana nueva.

    Aquí un ejemplo de trabajo: Copia Directo | Fuente

    (function() {
    
      document.getElementById("theButton").onclick = function() {
    
        var novoForm = window.open("http://jsbin.com/ugucot/1", "wFormx", "width=800,height=600,location=no,menubar=no,status=no,titilebar=no,resizable=no,");
        novoForm.onload = function() {
          var w = novoForm.innerWidth;
          var h = novoForm.innerHeight;
          novoForm.document.getElementById("monitor").innerHTML = 'Janela: '+w+' x '+h;
        };
      };
    })();

    Me pregunto si alguna restricción de seguridad o me estoy perdiendo algo…

    No en su ejemplo, como se muestra, no, porque la página está claramente se carga desde el mismo origen. Si la dirección URL eran de un diferentes origen, entonces sí, que estaría funcionando en el Mismo Origen De La Política De, que prohíbe la cruz-origen de secuencias de comandos. Usted puede relajarse, que a través de la document.domain de la propiedad, teniendo ambas la ventana que contiene el código de arriba y en la ventana que se cargan configuración document.domain el mismo valor. De el enlace de arriba:

    Si dos de windows (o marcos) contienen secuencias de comandos que configurar el dominio para el mismo valor, la política de mismo origen es relajado para estas dos ventanas, y cada ventana puede interactuar con los otros. Por ejemplo, cooperando scripts en documentos cargados de orders.example.com y catalog.example.com puede establecer su documento.propiedades de dominio a «example.com», con lo que los documentos parecen tener el mismo origen y que permite a cada documento para leer las propiedades de los otros.

    Más acerca de document.domain se puede encontrar en MDN. Tenga en cuenta que esto sólo funciona cuando ambos documentos comparten un dominio principal, por ejemplo, por lo que funciona para app1.example.com y app2.example.com si se ponen a example.com, pero no para example1.com y example2.com porque no han común de valor que se pueden establecer.

    • +1; no sabía acerca de la document.domain de la propiedad.
    • Yo intente con onload, pero este evenet no le funcionan. No sé por qué, voy a hacer más pruebas…
    • No estoy seguro, pero creo que el document.domain cosa sólo funciona cuando el nombre de dominio primario es el mismo para windows. Por ejemplo, Google padres y Stackoverflow emergente no puede usar esto para comunicarse. Aunque no estoy seguro
    • Lo siento, sí, me han marcado de eso. (Y sí, eso es correcto.) Hecho.
    • Quiero decir, tengo la esperanza de que era obvio, pero creo que es importante saber 🙂
    • Todavía no podía hacer el onload de fuego. Pareciera que la ventana se abre antes de que el caso de ser implementado. No hay una «nueva Ventana()» constructor de modo que no sé cómo crear un objeto de la ventana y hacerlo bien. Tal vez en la web real que va a trabajar, pero no es fiable. Así que me hice una prueba de función y un setInterval para descubrir en el «monitor» div estará disponible para mí. No es una solución bonita, pero funciona.
    • Funcional es todo bastante que usted realmente necesita. 🙂 Felicidades por ella. Yo no lo he probado con la página de destino, definitivamente, se sirve de la memoria caché, que es probablemente lo que está pasando, definitivamente hay una condición de carrera allí. Me gustaría probable que el uso de onload, pero con un temporizador.

  2. 0

    Alternativamente, esta es una solución:

    var novoForm = window.open("somform.html", "wFormx", "width=800,height=600,location=no,menubar=no,status=no,titilebar=no,resizable=no,");
    var teste = function(){
        var mon = novoForm.document.getElementById("monitor");
        if(typeof(mon)!="undefined"){
            //novoForm.alert("Achei!");
            var h = novoForm.innerHeight;
            var strh = String(h - 40 - 30)+'px';
            novoForm.document.getElementById("pagina").style.height = strh;
            novoForm.document.getElementById("monitor").innerHTML = '<p class="legenda">&copy; NetArts | gustavopi</p>';
            clearInterval(id);
        }
    }
    var id = setInterval(teste, 100);

    Este va a hacer el trabajo. No es una «bonita» la solución para mí, ¡pero funciona!

  3. -1

    Depende de qué url intenta cargar en la nueva ventana. @T. J se encuentra justo en eso. También tenga en cuenta que si usted sólo desea cargar un documento en blanco que usted puede cargar «about:blank» en la url. La única diferencia es que usted usaría outerWidth ya que no se ha cargado un documento real.

    var novoForm = window.open("about:blank", "wFormx", "width=800,height=600,location=no,menubar=no,status=no,titilebar=no,resizable=no,");
    var w = novoForm.outerWidth;
    var h = novoForm.outerHeight;
    novoForm.document.body.innerHTML = 'Janela: '+w+' x '+h;

Dejar respuesta

Please enter your comment!
Please enter your name here