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