<script> in javascript-code-Dokument.schreiben()
Ich bekam einen Teil von javascript-code eingebettet in HTML (erzeugt auf der server-Seite), die wie folgt aussieht:
function winWriteMail2(){
var win = open('','wininfo', 'width=400,height=300,scrollbars=yes,resizable=yes');
win.document.open();
win.document.write('<HTML><HEAD><META http-equiv="Content-type" content="text/html; charset=iso-8859-2"><LINK type="text/css" href="/css/main.css">');
win.document.write('<scr' + 'ipt language="javascript" type="text/javascript" src="/js/JSFILE.js"></scr' + 'ipt>');
win.document.write('</HEAD><BODY BGCOLOR="#f7f3e7">');
<!-- window content goes here -->
win.document.write('</BODY></HTML>');
win.document.close();
}
Dieser code wird ausgeführt beim klicken eines Elementes.
Den problematischen Teil für mich ist die Einbindung der javascript-Datei - funktioniert es in Firefox und Chrome, aber im IE (7 und 8, als ich getestet) verhält sich merkwürdig. Mit der Zeile mit JSFILE
es, die Fenster auf klicken, wird Sie geöffnet, aber leer ist, CPU ist 100% ausgelastet und der einzige Weg ist, zu töten IE.
Jemand helfen kann, mit dem Umgang mit diesem problem? Vielleicht sollte ich eine andere Möglichkeit zum einfügen der javascript-Dateien drin?
Ich versucht, statt win.document.write()
die DOM-manipulation-Methode, die Umsetzung dieses Teils des Codes nach win.document.close()
:
h = win.document.getElementsByName('head')[0];
js = document.createElement('script');
js.src = '/js/JSFILE.js';
h.appendChild(js);
aber dann ist der code nicht geladen, auch in Firefox (und untersuchen mit firebug nicht zeigen, es kann sogar zu sehen).
Nach einigen Prüfungen habe ich festgestellt, dass das problem dadurch verursacht wird <script>
Elemente mit ein src=
- Attribut definiert. Wenn ich ein inline-Skript, wie:
<script type='text/javascript'>alert('foo')</script>
innerhalb meiner document.write()
, das Fenster öffnet, wird die alert-box zeigt sich und alles ist in Ordnung.
Aber mit einem
<script type='text/javascript' src='/js/foo.js'></script>
IE Stände beim öffnen des neuen Fenster, hält sich mit 100% CPU.
- Randnotiz: Ein performance-boost. Verwenden Sie eine write-Anweisung anstelle von mehreren. Bauen Sie die gesamte HTML-string als erste schreiben an das Fenster.
- Vielen Dank für die info. Sie fixieren es sicher.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser code war für mich:
Hier ist, was ich brauchte, um die änderung im code, damit es funktioniert:
Müssen Sie erstellen, die das script-element im gleichen Dokument, das Sie Anhängen.
Google Analytics macht es auf diese Weise:
Denke, deine DOM-basierten code ist in Ordnung, aber versuchen, (a) die absolute Skript-URL, (b) der Skript-Typ und (c) update-src nach anfügen, damit sollte es funktionieren mehr zuverlässig:
Hoffe, das hilft.
BEARBEITEN
Durch die Art und Weise, ist es eine gute Idee eine Art Rückruf, um sicherzustellen, dass Skript geladen wurde, bevor sein code. Code Aussehen kann, ähnlich wie dieses:
Hier Rückruf ist buchstäblich die Funktion ausführen.
Haben Sie einen Blick auf writeCapture.js
ich weiß, das ist ein 4 y/a-thread, aber ich wollte hinzufügen ein Update, ich habe gerade kombiniert über ein paar verschiedene Artikel/Fragen:
anstatt Anhängen der Dokumente (.css .js, etc) nach dem Dokument.schreiben, rufen, veränderte ich meine offenen Aufruf wie folgt Aussehen:
hinzufügen '//' setzt automatisch das Protokoll (http vs. https) und zu dokumentieren.domain = gut, Ihre Domäne. im wesentlichen wird hiermit die Adressleiste korrekt im IE, so dass mit
/foo/bar.js
Typ src-und href ' s befinden und ordnungsgemäß funktionieren.hoffe, das jemand hilft! 😛