繁体   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