Da Sie nicht genügend Details gepostet haben, um eine vollständige Antwort auf Ihr Problem zu schreiben (Sie schreiben: "Ich schreibe dies aus dem Stegreif, also erinnere ich mich nicht genau daran, wie die Skript-Tags aufgeteilt sind"), hier sind einige allgemeine Tipps, um Ihnen den Einstieg zu erleichtern, anstatt einer direkten Lösung. Sie sagen, dass Sie überzeugt sind, dass das Problem mit zu vielen document.write
-Aufrufen zusammenhängt, daher werde ich mich darauf konzentrieren, ihre Anzahl wo immer möglich zu minimieren. Hoffentlich wird es Ihnen letztendlich ermöglichen, Ihr Problem zu lösen.
Zusätzliches Semikolon
In Ihrem ersten Beispiel haben Sie:
document.write(' ... ';);
Durch Entfernen des zusätzlichen Semikolons würde es sein:
document.write(' ... ');
Könnte das einige Probleme verursachen? Wenn nicht, dann lesen Sie weiter...
Zunächst einige Grundlagen:
Skripttyp und Sprache
</code></pre>
<p>Das Attribut "language" ist veraltet, verwenden Sie es also nicht. Das Problem mit dem Attribut "type" besteht darin, dass der MIME-Typ text/javascript veraltet ist (siehe <a href="http://www.ietf.org/rfc/rfc4329.txt" rel="nofollow noreferrer">RFC4329</a>) und application/javascript (der korrekte Typ) nicht universell unterstützt wird. In der Praxis wusste jeder Browser schon immer, dass es sich ohne "type" einfach um JavaScript handelt, und deshalb empfehle ich, es für jede Markup-Version, in der es optional ist, wegzulassen, wie z.B. HTML5. (Abgesehen davon sollte der MIME-Typ vom Server festgelegt werden.) Weitere Informationen finden Sie unter <a href="https://stackoverflow.com/questions/2267476/html-script-tag-type-or-language">dieser Frage</a>. Das gesagt habend, werde ich in den folgenden Beispielen einfach <code><script></code> verwenden.</p>
<h1>Minimierung von document writes</h1>
<p>Wenn dies in Ihrem HTML enthalten ist:</p>
<pre><code><script>
document.write('\x3Cscript src="file.js">\x3C/script>');
ist genau äquivalent zu:
Es macht keinen Sinn, document.write
in diesem Fall zu verwenden, es sei denn, Sie bauen den Skriptnamen dynamisch in JavaScript auf oder ähnliches, aber selbst dann können Sie es ohne document.write
tun.
Wenn Sie den Pfad Ihres Skripts nicht kennen und z.B. eine JavaScript-Variable namens path
verwenden, könnten Sie versucht sein, etwas Ähnliches wie dies zu schreiben:
document.write('\x3Cscript src="' + path + '">\x3C/script>');
Aber Sie können mit etwas Ähnlichem wie dem, was Google für Analytics verwendet, ziemlich dasselbe Ergebnis erzielen:
var newScript = document.createElement('script');
newScript.src = path; // or newScript.src = 'file.js';
var firstScript = document.getElementsByTagName('script')[0];
firstScript.parentNode.insertBefore(newScript, firstScript);
Oder kürzer, mit appendChild
:
var newScript = document.createElement('script');
newScript.src = path; // or newScript.src = 'file.js';
document.body.appendChild(newScript);
Oder einfacher mit jQuery:
$('', {src: path}).appendTo('body');
</code></pre>
<p>wo <code>path</code> die URL Ihres Skripts ist. Oder teilweise mit jQuery nur für die Einfügung in das DOM:</p>
<pre><code>var newScript = document.createElement('script');
newScript.src = path; // or newScript.src = 'file.js';
$('body').append(newScript);
</code></pre>
<p>Sie können möglicherweise auch jQuery.getScript verwenden:</p>
<pre><code>$.getScript(path);
</code></pre>
<h1>Weitere Ideen</h1>
<p>Weitere Ideen finden Sie unter:</p>
<ul>
<li><a href="https://developers.google.com/analytics/devguides/collection/gajs/" rel="nofollow noreferrer">Google-Analytics-Code asynchrone Syntax</a></li>
<li><a href="https://developers.google.com/analytics/devguides/collection/gajs/gaTrackingOverview" rel="nofollow noreferrer">Google Analytics-Code traditionelle Syntax</a> (mit <code>document.write</code>)</li>
<li><a href="http://api.jquery.com/jQuery.getScript/" rel="nofollow noreferrer">jQuery getScript</a></li>
<li><a href="http://yuilibrary.com/yui/docs/get/" rel="nofollow noreferrer">YUI Get</a></li>
<li><a href="http://requirejs.org/" rel="nofollow noreferrer">RequireJS</a></li>
</ul>
<p>Dies sind einige grundlegende Dinge, die Sie tun können, um die Verwendung von <code>document.write</code> zu minimieren. Hoffentlich wird Ihnen das den Einstieg erleichtern.</p></x-turndown>
3 Stimmen
Sidenote: Sprachattribut ist ungültig.
0 Stimmen
Im letzten von Ihnen veröffentlichten Skript meinten Sie
_some_Path_to_third_party.js
, oder?0 Stimmen
Auch, in welchen Versionen von IE haben Sie getestet?
0 Stimmen
Im zweiten
document.write()
escapst du doppelte Anführungszeichen aus einem String, der in einfachen Anführungszeichen eingeschlossen ist. Kann IE diese Situation korrekt behandeln?0 Stimmen
document.write('\x3Cscript type="text/javascript" src="_some_Path_to_internal_ad_server">\x3C/script>';);
Warum ist diese Schicht überhaupt vorhanden? Warum nicht einfach direkt auf den internen Ad-Server verlinken?0 Stimmen
Vielleicht irgendein Fiddle? "Ich schreibe das aus dem Gedächtnis heraus, also weiß ich nicht genau, wie die Skripttags aufgeteilt sind" - Nun, wenn du es nicht weißt, wie erwartest du dann, dass jemand hier es weiß? Wenn du sicher bist, dass das Problem mit verschachtelten document.write-Aufrufen zusammenhängt, dann handelt es sich um eine Duplikat von dieser Frage.
0 Stimmen
Quad-Ausrufezeichen funktioniert bei mir nicht.