【发布时间】:2018-09-11 09:15:39
【问题描述】:
我正在将 XSLTProcessor::transformToDocument() 的输出 (HTMLDocument) 加载到 Iframe 中。
HTML 已正确呈现,但输出中的 Javascript 未执行/触发(以下是 FF 检查器输出)
<iframe id="output-frame"></iframe>
#document
<html>
<head></head>
<body onload="console.log('hello')">Hello</body>
</html>
如果我改为引用静态 html 文件,它工作正常:
<iframe id="output-frame" src="iframe.html"></iframe>
#document
<html>
<head></head>
<body onload="console.log('hello')">Hello</body>
</html>
是否有一种技术可以显式触发内部 javascript?
问题可能来自technique I'm using 将 HTMLDocument 加载到 Iframe 中:
var doc = xsltProcessor.transformToDocument(xml);
var frame = document.getElementById("output-frame");
var destDocument = frame.contentDocument;
var srcNode = doc.documentElement;
var newNode = destDocument.importNode(srcNode, true);
destDocument.replaceChild(newNode, destDocument.documentElement);
我真的不需要使用Iframe,我可以用transformToDocument()的结果替换当前页面。
我正在FF62中测试。
[更新] 我找到了看起来相关的 External JavaScript doesn't work in iFrames?。
我试图在 iframe 上指定一个相同的源 src(稍后将被我的转换输出覆盖)但它没有帮助。
有人知道如何在 FF 中记录“同源”违规/冲突吗?
【问题讨论】:
-
有旧的 DOM Level 0 方式
destDocument.open(); destDocument.write(new XMLSerializer().serializeToString(doc)); destDocument.close();。 -
w3.org/TR/html52/… 建议如果您使用
transformToFragment,则在插入文档时执行 XSLTProcessor 创建的脚本元素可能会更成功。 -
非常感谢@MartinHonnen - 您的第一个选项工作正常,我实际上可以用它替换父页面并摆脱我的框架。
标签: javascript html xslt