[英]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.