2012-08-15 15 views
8

Ich benutze Execute JS, um Javascript-Code in Firefox zu schreiben und zu testen. Ich möchte einen neuen Tab/Fenster öffnen und etwas darauf zu schreiben und ich versuchteÖffnen Sie eine neue Registerkarte/Fenster und schreiben Sie etwas?

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

Und

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

Jedoch habe ich diesen Fehler immer bekommen

[Exception ... " Die Operation ist unsicher. " Code: "18" nsresult: "0x80530012 (Security)"

Gibt es einen Weg durch diese Ausnahme zu bekommen?

+0

"Ausnahme: Der Vorgang ist unsicher" ist ein Fehler in der Firefox-Standardkonsole (https://bugzilla.mozilla.org/show_bug.cgi?id=663406), nicht mit der Firebug-Konsole in Firefox und Chromium Standard-Konsole, habe ich hier kommentiert https://StackOverflow.com/Questions/12898528/loading-an-iframe-from-a-String-Variable-in-Xulrunner#comment41391652_12911226 – baptx

Antwort

19

Bearbeiten: Ab 2018, diese Lösung no longer works. Sie sind also wieder dabei, in einem neuen Fenster about:blank zu öffnen und Inhalt hinzuzufügen.

nicht "Schreiben" an das Fenster, es ist einfach öffnen mit dem Inhalt benötigen Sie:

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

Zum Vergleich: data URIs

+0

Vielen Dank der Code funktioniert gut, aber ich bin frage mich, wie kann ich diesem neu geöffneten Fenster neue Daten hinzufügen? – Teiv

+1

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

+0

Also versuche ich diesen Code http://pastebin.com/n1znvdYk wie Sie mir sagen, aber es scheint, dass das neue Element nicht an das Dokument angehängt wird. Kannst du das bitte für mich reparieren? – 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) funktioniert nicht in Chrom ab 2018

+0

URIs im Allgemeinen werden nicht blockiert - Daten-URLs sind. Offenbar werden sie häufig für Phishing-Angriffe verwendet Chrome und Firefox sind Blockierung - siehe [Mozilla Security Blog Post] (https://blog.mozilla.org/security/2017/11/27/blocking-top-level-navigations-data-urls-firefox-58/), die [ Chrome beabsichtigt, den Post zu verwerfen und zu entfernen] (https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/GbVcuwg_QjM%5B1-25%5D) und den [Chrome-Statusbeitrag darauf hingewiesen, dass es entfernt wurde] (https://www.chromestatus.com/feature/5669602927312896). –

0

Top-Level-Navigation zu Daten-URLs wurde in Chrome, Firefox (mit einigen Ausnahmen), IE und Edge (und wahrscheinlich andere Browser zu booten) blockiert. Sie werden anscheinend häufig für Phishing-Angriffe verwendet, und große Browser-Anbieter entschieden, dass die Gefahr den Wert der legitimen Anwendungsfälle überwog.

Diese Mozilla security blog post erklärt, dass Firefox

  • Webseite Navigation zu einer neuen Top-Level-Daten URL-Dokument mit blockieren:
    • window.open("data:…");
    • window.location = "data:…"
    • klicken <a href="data:…"> (einschließlich Strg + Klick, "Open-Link-in *", usw.).
  • Webseite Umleiten zu einem neuen Top-Level-Daten URL-Dokument mit:
    • 302 Umleitungen an "data:…"
    • Meta-Refresh zu "data:…"
  • Externen Anwendungen (z, Thunderbird)

aber nicht blockieren

  • Benutzer explizit Eingabe/Einfügen "data:…" in die Adressleiste
  • Öffnen aller Klartextdatendateien eine Daten URL im Browser öffnen
  • Öffnen "data:image/*" im obersten Fenster, es sei denn, es ist "data:image/svg+xml"
  • Öffnen "data:application/pdf" und "data:application/json"
  • Herunterladen einer Daten: URL, z.B. ‚Save-Link-as‘ von "data:…"

Sie können auch die proposal to deprecate and remove top-frame navigation to data URLs in Chrome lesen und die current Chrome status indicating that is has been removed anzuzeigen.

Was, wie man tatsächlich öffnen HTML in einem neuen Tab oder Fenster, dies ausreichend sein sollte:

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 

Beachten Sie, dass zumindest in Chrome, external scripts injected via document.write might not be loaded on slower connections. Das mag hier nicht relevant sein, aber etwas, auf das man achten sollte.

+1

Dies öffnet die Adresse, auf der Sie sich gerade befinden, in einem neuen Tab. Wahrscheinlich meintest du 'window.open (" about: blank "," _blank ")'. Außerdem wechselt der Browser automatisch zur neuen Registerkarte, der Aufruf von '.focus()' ist sinnlos. –

+0

Gotcha - danke für die Info! Ich werde fortfahren und diesen Schnitt machen (und ihn in meinen eigenen Code übernehmen). Danke auch für die Formatierung. –

Verwandte Themen