如何获取使用document.write()创建的JavaScript来执行?

时间:2020-03-05 18:55:10  来源:igfitidea点击:

我有一个多帧布局。其中一个框架包含一个表单,我正在通过XMLHttpRequest提交该表单。现在,当我使用document.write()用表单重写框架时,并且我要添加的新页面包含任何javascript,那么javascript是否不会在IE6中运行?

例如:

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

在上述情况下,页面内容被test代替,但是alert()未执行。在Firefox中可以正常工作。

解决上述问题的方法是什么?

解决方案

回答

解决方法是在Callback函数或者调用eval()方法时以编程方式向JavaScript中的DOM元素添加&lt;script>块。这是我们可以在IE 6中完成此工作的唯一方法。

回答

另一个可能的选择是使用JSON,动态添加脚本引用,这些引用将由浏览器自动处理。

干杯。

回答

简而言之:我们不能真正做到这一点。但是,JavaScript库(例如jQuery)提供了实现此目的的功能。如果我们依赖于此,请尝试使用jQuery。

回答

评估和/或者动态执行脚本是不明智的做法。非常不好的做法。非常非常非常糟糕的做法。我不能承受太大的压力,这是多么糟糕的做法。

又名:听起来像是糟糕的设计。我们想再次解决什么问题?

回答

与其公开JS代码,不如将其包含在一个函数中(我们称之为"doIt")。框架窗口(假设它的名称是" formFrame")有一个父窗口(即使它不可见),我们可以在其中执行JS代码。在该范围内执行实际的帧重写操作:

window.parent.rewriteFormFrame(theHtml);

父窗口中的rewriteFormFrame函数如下所示:

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

回答

我们可以在body标签(<body onload =" jsWrittenLoaded()">`)中使用onload属性。