大規模で高負荷のプロジェクトに取り組んでいると、フォーラムやブログですでに数十億のトピックで説明されている問題が発生しましたが、私の場合に役立つ解決策はありません。これが話です。
バナーの HTML コードがありますが、コードがわかりません。プレーンな HTML の場合もありますが、その<script>
中に document.write を含む<script>
タグであり、その中に src to doubleclick network を含むタグがある場合もあります。
つまり、script > document.write > script(doubleclick) です。
ご存知かもしれませんが、doubleclick ネットワークは document.write も使用し、ほとんどの場合、もう 1 つの js ファイルをロードする必要があるフラッシュ バナーを表示します。
結局のところ、script > document.write > script(doubleclick) > document.write > script > ...
これは、HTML に直接配置するとうまく機能します。ページ レンダリング 1 の部分、バナー 1 のロード、ページのレンダリングの維持、バナー 2 のロード、ページ レンダリングの終了。
しかし、今は最初にページをレンダリングする必要があり、その後にバナーをロードする必要があります。バナーは document.write を使用するため、window.onload イベントの前にロードする必要があります (注意: window.onload の後、document.write はドキュメント全体を書き換えます)。
私がやったこと:
head セクションには、プロパティ スコープを持つバナー オブジェクト (実際の名前空間の種類は巨大です :)) があります。
ページのレンダリングとバナー コードが一致したら、バナーのコードをスコープに配置して配置し<div id="bannerPlaceHolder"+id></div>
ます。ここでは、後でバナー コンテンツを配置する必要があります。
ページがレンダリングされ、</body>
タグの前に<script>banners.load()</script>
banners.load メソッドを配置すると、スコープ配列内の各アイテムに対して次のことが行われます。
document.write('<div id="codeHolder'+id+'">');
document.write(bannerCode);
document.write('</div>');
そして、この後にのみ、これをwindow.onload()
行うイベントがあります:
すべてのバナー codeHolders を取得し、ノードごとに codeHolder から placeHolder にノードを追加するため、ページをレンダリングした後にバナーが読み込まれ、バナーは適切な場所に配置されます。
IE 以外はすべて完璧です。DOM に動的に配置された js スクリプトを非同期でロードするため、doubleclick スクリプト内の document.write は、codeHolder ノードではなく、ドキュメントの最後にノードを追加します。いつものようにIEのみです。
解決策を知っている人には本当に感謝しています。