如何让使用 document.write() 创建的 JavaScript 执行?
Posted
技术标签:
【中文标题】如何让使用 document.write() 创建的 JavaScript 执行?【英文标题】:How do I get JavaScript created with document.write() to execute? 【发布时间】:2010-09-09 07:58:12 【问题描述】:我有一个多框架布局。其中一个框架包含一个表单,我通过 XMLHttpRequest 提交该表单。现在,当我使用 document.write() 用表单重写框架,并且我添加的新页面包含任何 javascript 时,javascript 不会在 IE6 中执行?
例如:
document.write("<html><head><script>alert(1);</script></head><body>test</body></html>");
在上述情况下,页面内容被替换为 test 但 alert() 没有被执行。这在 Firefox 中运行良好。
上述问题的解决方法是什么?
【问题讨论】:
【参考方案1】:解决方法是在回调函数或调用 eval() 方法时以编程方式将 <script>
块添加到 JavaScript 中的头部 DOM 元素。只有这样才能在 IE 6 中完成这项工作。
【讨论】:
【参考方案2】:您可以在 body 标记 (<body onload="jsWrittenLoaded()">
) 中使用 onload 属性。
【讨论】:
【参考方案3】:不要将 JS 代码公开,而是将其包含在一个函数中(我们称之为“doIt
”)。您的框架窗口(假设它的名称是“formFrame”)有一个父窗口(即使它不可见),您可以在其中执行 JS 代码。在该范围内执行实际的帧重写操作:
window.parent.rewriteFormFrame(theHtml);
父窗口中的rewriteFormFrame
函数如下所示:
function rewriteFormFrame(html)
formFrame.document.body.innerHTML = html;
formFrame.doIt();
【讨论】:
【参考方案4】:动态评估和/或执行脚本是不好的做法。非常糟糕的做法。非常非常非常糟糕的做法。我怎么强调都不为过,这是多么糟糕的做法。
AKA.: 听起来设计很糟糕。你又想解决什么问题?
【讨论】:
【参考方案5】:简而言之:你不能真正做到这一点。然而,诸如 jQuery 之类的 JavaScript 库提供了功能来做到这一点。如果你依赖它,试试 jQuery。
【讨论】:
【参考方案6】:另一种可能的选择是使用 JSON,动态添加将由浏览器自动处理的脚本引用。
干杯。
【讨论】:
您能详细解释一下吗?我认为这行不通,但也许我只是不明白您的建议。以上是关于如何让使用 document.write() 创建的 JavaScript 执行?的主要内容,如果未能解决你的问题,请参考以下文章
如果部分写入参与超时块,为啥由 document.write 创建的文档呈现方式不同?
如何在 document.write('') 之后显示隐藏按钮?
Javascript 新行 - document.write 结束
如何在不使用 $_SESSION["name"] = "<script>document.write(name)</script>";