2012-08-15 15 views
8

Sto usando Execute JS per scrivere e testare il codice Javascript all'interno di Firefox. Voglio aprire una nuova scheda/finestra e scrivere qualcosa ad esso e ho provatoApri una nuova scheda/finestra e scrivici qualcosa?

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'); 

E

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

Tuttavia ho sempre questo errore

[Exception ... " L'operazione è insicura. " Codice: "18" nsresult: "0x80530012 (SecurityError)"

Esiste un modo per superare questa eccezione?

+0

"Eccezione: l'operazione non è sicura" è un bug nella console di default di Firefox (https://bugzilla.mozilla.org/show_bug.cgi?id=663406), non succede con la console Firebug su Firefox e Chromium console predefinita, ho commentato qui https://stackoverflow.com/questions/12898528/loading-an-iframe-from-a-string-variable-in-xulrunner#comment41391652_12911226 – baptx

risposta

19

Modifica: A partire dal 2018, questa soluzione no longer works. Quindi torni ad aprire about:blank in una nuova finestra e ad aggiungere contenuti ad esso.

Non "scrivere" alla finestra, basta aprirlo con i contenuti necessari:

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

Per riferimento: data URIs

+0

Grazie mille il codice funziona bene, ma io sono chiedendo come posso aggiungere nuovi dati a questa finestra appena aperta? – Teiv

+1

Utilizzare [metodi DOM] (https://developer.mozilla.org/en-US/docs/DOM/Node.appendChild)? –

+0

Così provo questo codice http://pastebin.com/n1znvdYk come mi dici ma sembra che il nuovo elemento non sia affatto aggiunto al documento. Puoi sistemare questo per me, per favore? – 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) non funziona in chrome a partire dal 2018

+0

Gli URI in generale non vengono bloccati - gli URL dei dati sono. Apparentemente sono comunemente usati per gli attacchi di phishing. Chrome e Firefox lo sono bloccandolo - vedi il [post sul blog di sicurezza di Mozilla] (https://blog.mozilla.org/security/2017/11/27/blocking-top-level-navigations-data-urls-firefox-58/), il [ Chrome intenta a deprecare e rimuovere post] (https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/GbVcuwg_QjM%5B1-25%5D) e [Post di stato di Chrome indicando che è stato rimosso] (https://www.chromestatus.com/feature/5669602927312896). –

0

La navigazione di livello superiore agli URL di dati è stata bloccata in Chrome, Firefox (con alcune eccezioni), IE e Edge (e probabilmente altri browser da avviare). Apparentemente sono comunemente usati per gli attacchi di phishing, e i principali produttori di browser hanno deciso che il pericolo superasse il valore fornito dai legittimi casi d'uso.

Questo Mozilla security blog post spiega che Firefox bloccherà

  • pagina Web Navigazione verso un nuovo documento URL i dati di primo livello utilizzando:
    • window.open("data:…");
    • window.location = "data:…"
    • cliccando <a href="data:…"> (compresi ctrl + clic, 'open-link-in- *', ecc.).
  • pagina Web reindirizzando ad un nuovo documento URL i dati di primo livello utilizzando:
    • 302 reindirizza a "data:…"
    • meta refresh a "data:…"
  • applicazioni esterne (ad esempio, Thunderbird) l'apertura di un URL di dati nel browser

ma non bloccherà

  • utente esplicitamente di entrare/incolla "data:…" nella barra degli indirizzi
  • Apertura tutti i file di dati di testo normale
  • Apertura "data:image/*" nella finestra di livello superiore, a meno che non sia "data:image/svg+xml"
  • Apertura "data:application/pdf" e "data:application/json"
  • Download di dati: URL, ad es. ‘Salva-link-come’ di "data:…"

È possibile anche leggere il proposal to deprecate and remove top-frame navigation to data URLs in Chrome e visualizzare il current Chrome status indicating that is has been removed.

Quanto a come effettivamente aperto HTML in una nuova scheda o finestra, questo dovrebbe essere sufficiente:

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 

notare che almeno in Chrome, external scripts injected via document.write might not be loaded on slower connections. Questo potrebbe non essere rilevante qui, ma qualcosa a cui prestare attenzione.

+1

Questo aprirà l'indirizzo in cui ci si trova attualmente in una nuova scheda. Probabilmente intendevi 'window.open (" about: blank "," _blank ")'. Inoltre, il browser passerà automaticamente alla nuova scheda, chiamando '.focus()' non ha senso. –

+0

Gotcha - grazie per le informazioni! Vado avanti e apporto quella modifica (e la adotto nel mio codice). Grazie per aver corretto anche la mia formattazione. –

Problemi correlati