簡體   English   中英

外部js文件中的javascript document.write

[英]javascript document.write in external js file

在大型高負載項目上工作我遇到了問題,已經在論壇和博客上描述了數十億個主題,但是沒有解決方案可以幫助我。 這是故事。

我有橫幅的HTML代碼,我不知道代碼是什么。 有時它是純HTML,但有時它是帶有document.write的<script>標簽,其中<script>標簽有src來雙擊網絡。

所以我們有:script> document.write> script(doubleclick)。

正如您所知,doubleclick網絡也使用document.write,並且大部分時間他們都提供需要加載一個js文件的flash橫幅。

畢竟我們有:script> document.write> script(doubleclick)> document.write> script> ...

當您直接將它放在HTML中時,這很有用。 頁面渲染1部分,加載banner1,保持渲染頁面,加載banner2,完成頁面渲染。

但是現在我需要首先渲染頁面,並且僅在該負載橫幅之后。 作為banner使用document.write我需要在window.onload事件之前加載它(注意:在window.onload document.write之后將重寫整個文檔。)

我做了什么:

在頭部我有一個橫幅對象(真正的名稱空間類型巨大的:)),具有屬性范圍。

當頁面呈現和橫幅代碼相遇時,我將橫幅的代碼放入范圍並放入<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中。

任何可能知道解決方案的人都會非常感激。

你需要writeCapture.js (完全披露:我是作者。)所有的賭注都與第三方腳本有關。 今天他們使用document.write生成一些特定的HTML,但是明天他們可以更改它,並且需要更新任何基於替換document.write簡單hacks。 writeCapture會處理這個問題。 您的用法如下:

$('#bannerPlaceHolder').writeCapture().html('<script type="text/javascript" src="http://doubleclick.net/bannerCode.js"></script>');

該庫可以處理任何深度的腳本標記,並且可以很好地處理散布的HTML。 如果你不使用jQuery,它也有一個獨立的構建。

通常使用橫幅,您就會知道確切的尺寸和位置,那么如何使用bannerCode中的內容動態創建iframe,這就是全部。

拆分document.write() - 在單獨的-tags中調用,因此輸出應如下所示:

文件撰寫( ''); 文件撰寫(bannerCode);

文件撰寫( '');

IE將等待document.write(bannerCode)准備就緒,並在寫入結束標簽時。

也許你可以使用屬性innerHTML:document.getElementById(“x”)。innerHTML =“.................”;

或者你可以使用DOM:CreateElement和AppendChild

將其加載到隱藏(大小為0x0)的iframe中,然后使用javascript將其移動到其他位置

我認為iframe解決方案很難看。 為什么你不能將橫幅加載到一個單獨的頁面並將它們AJAX加載到DIV中?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM