簡體   English   中英

如何使用document.write()創建JavaScript來執行?

[英]How do I get JavaScript created with document.write() to execute?

我有一個多幀布局。 其中一個框架包含一個表單,我通過XMLHttpRequest提交。 現在,當我使用document.write()來重寫帶有表單的框架時,我添加的新頁面包含任何javascript,那么javascript在IE6中沒有被執行?

例如:

document.write("<html><head><script>alert(1);</script></head><body>test</body></html>");

在上面的例子中,頁面內容被替換為test但不執行alert()。 這在Firefox中運行良好。

針對上述問題的解決方法是什么?

而不是將JS代碼公開,將其包含在一個函數中(讓我們稱之為“ doIt ”)。 您的框架窗口(假設它的名稱是“formFrame”)有一個父窗口(即使它不可見),您可以在其中執行JS代碼。 在該范圍內執行實際的幀重寫操作:

window.parent.rewriteFormFrame(theHtml);

父窗口中的rewriteFormFrame函數看起來像這樣:

function rewriteFormFrame(html) {
    formFrame.document.body.innerHTML = html;
    formFrame.doIt();
}

解決方法是以編程方式將<script>塊添加到JavaScript中的頭部DOM元素的Callback函數或調用eval()方法。 這是你在IE 6中完成這項工作的唯一方法。

您可以在body標簽中使用onload屬性( <body onload="jsWrittenLoaded()"> )。

簡而言之:你不能真的這樣做。 但是,jQuery之類的JavaScript庫提供了完全相同的功能。 如果您依賴於此,請嘗試jQuery。

動態評估和/或執行腳本是不好的做法。 非常糟糕的做法。 非常非常非常糟糕的做法。 我不能強調,它的實踐有多糟糕。

AKA:聽起來很糟糕的設計。 你想再次解決什么問題?

另一種可能的替代方法是使用JSON,動態添加腳本引用,這些引用將由瀏覽器自動處理。

干杯。

暫無
暫無

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

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