2012-08-15 19 views
8

Estoy usando Execute JS para escribir y probar el código de Javascript dentro de Firefox. Quiero abrir una nueva pestaña/ventana y escribir algo a ella y traté¿Abrir una nueva pestaña/ventana y escribirle algo?

var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator); 
var win = wm.getMostRecentWindow("navigator:browser"); 
printWindow = win.open("about:blank"); 
printWindow = wm.getMostRecentWindow("navigator:browser"); 
printWindow.gBrowser.selectedBrowser.contentDocument.write('hello'); 

Y

myWindow=window.open('','','width=200,height=100') 
myWindow.document.write("<p>This is 'myWindow'</p>") 
myWindow.focus() 

Sin embargo siempre sale este error

[Excepción ... " La operación es insegura ". código: "18" nsresult: "0x80530012 (SecurityError)"

¿Hay alguna manera de obtener a través de esta excepción?

+0

"Excepción: la operación es insegura" es un error en la consola predeterminada de Firefox (https://bugzilla.mozilla.org/show_bug.cgi?id=663406), no ocurre con la consola Firebug en Firefox y Chromium consola predeterminada, comenté aquí https://stackoverflow.com/questions/12898528/loading-an-iframe-from-a-string-variable-in-xulrunner#comment41391652_12911226 – baptx

Respuesta

19

Editar: A partir de 2018, esta solución no longer works. Entonces, vuelve a abrir about:blank en una nueva ventana y agregarle contenido.

No "escribir" a la ventana, simplemente abrirlo con el contenido que necesita:

var data = "<p>This is 'myWindow'</p>"; 
myWindow = window.open("data:text/html," + encodeURIComponent(data), 
         "_blank", "width=200,height=100"); 
myWindow.focus(); 

Como referencia: data URIs

+0

Gracias mucho el código está trabajando muy bien, pero estoy ¿Se pregunta cómo puedo agregar datos nuevos a esta ventana recién abierta? – Teiv

+1

Usar [métodos DOM] (https://developer.mozilla.org/en-US/docs/DOM/Node.appendChild)? –

+0

Así que pruebo este código http://pastebin.com/n1znvdYk como me dices, pero parece que el nuevo elemento no se adjunta al documento en absoluto. ¿Puedes arreglar esto por favor? – Teiv

1
var winPrint = window.open('', '', 'left=0,top=0,width=800,height=600,toolbar=0,scrollbars=0,status=0'); 
winPrint.document.write('<title>Print Report</title><br /><br /> 
Hellow World'); 
winPrint.document.close(); 

window.open (URI) no funciona en Chrome a partir de 2018

+0

URI en general no están siendo bloqueados - URLs de datos se Aparentemente ellos son comúnmente utilizados para ataques de phishing Tanto Chrome y Firefox son bloqueándolo - vea la [publicación del blog de seguridad de Mozilla] (https://blog.mozilla.org/security/2017/11/27/blocking-top-level-navigations-data-urls-firefox-58/), el [ Chrome tiene la intención de desaprobar y eliminar la publicación] (https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/GbVcuwg_QjM%5B1-25%5D), y la [publicación de estado de Chrome lo que indica que se ha eliminado] (https://www.chromestatus.com/feature/5669602927312896). –

0

La navegación de nivel superior a las URL de datos se ha bloqueado en Chrome, Firefox (con algunas excepciones), IE y Edge (y probablemente otros navegadores para arrancar). Aparentemente, se usan comúnmente para ataques de phishing, y los principales proveedores de navegadores decidieron que el peligro superaba el valor proporcionado por los casos de uso legítimos.

Este Mozilla security blog post explica que Firefox bloqueará

  • página de navegador web a un nuevo documento URL datos de nivel superior usando:
    • window.open("data:…");
    • window.location = "data:…"
    • clic <a href="data:…"> (incluyendo ctrl + clic, 'open-link-in *', etc.).
  • página Web redirigir a un nuevo documento URL datos de nivel superior usando:
    • 302 redirige a "data:…"
    • meta de actualización a "data:…"
  • aplicaciones externas (por ejemplo,, Thunderbird) abrir una URL de datos en el navegador

pero no bloqueará

  • usuario entrar explícitamente/pegar "data:…" en la barra de direcciones
  • apertura de todos los archivos de datos de texto sin formato
  • Apertura "data:image/*" en la ventana de nivel superior, a menos que sea "data:image/svg+xml"
  • Apertura "data:application/pdf" y "data:application/json"
  • Descarga de un data: URL, por ejemplo, ‘Save-enlace-como’ de "data:…"

También puede leer el proposal to deprecate and remove top-frame navigation to data URLs in Chrome y ver el current Chrome status indicating that is has been removed.

En cuanto a la forma de HTML se abre en una nueva pestaña o ventana, esto debería ser suficiente realidad:

var tab = window.open('about:blank', '_blank'); 
tab.document.write(html); // where 'html' is a variable containing your HTML 
tab.document.close(); // to finish loading the page 

Tenga en cuenta que al menos en Chrome, external scripts injected via document.write might not be loaded on slower connections. Puede que no sea relevante aquí, pero hay que tener cuidado.

+1

Esto abrirá la dirección en la que se encuentra actualmente en una nueva pestaña. Probablemente quiso decir 'window.open (" about: blank "," _blank ")'. Además, el navegador cambiará a la nueva pestaña automáticamente, llamando '.focus()' no tiene sentido. –

+0

Gotcha - ¡gracias por la información! Continuaré y haré esa edición (y la adoptaré en mi propio código). Gracias por arreglar mi formato, también. –

Cuestiones relacionadas