我似乎无法找到答案的简单问题: 我在页面上有两个iframe,我想将第一个内容复制到第二个。 但是我不能通过将第一个iframe的url复制到第二个来实现,因为包含的页面是动态的。
这段代码确实做到了,但很多页面格式似乎都迷失了。而且我不知道它是否也是跨浏览器。
iframe2.contentWindow.document.write(iframe1.contentWindow.document.body.innerHTML);
可以这样做吗?
答案 0 :(得分:1)
提出的原生JavaScript解决方案:
首先,为了简单起见,我创建了2个对象文字:
var iframe1 = {
doc : undefined,
head : undefined,
body : undefined
};
var iframe2 = {
doc : undefined,
head : undefined,
body : undefined
};
接下来,我将所有内容放在iframe1的window.onload
处理程序下,以确保它已完全加载:
document.getElementById("iframe1").contentWindow.onload = function() {
然后我分配了所有对象文字属性:
iframe1.doc = document.getElementById("iframe1").contentWindow.document;
iframe1.head = iframe1.doc.getElementsByTagName("head")[0];
iframe1.body = iframe1.doc.getElementsByTagName("body")[0];
iframe2.doc = document.getElementById("iframe2").contentWindow.document;
iframe2.head = iframe2.doc.getElementsByTagName("head")[0];
iframe2.body = iframe2.doc.getElementsByTagName("body")[0];
接下来,我需要创建一些函数removeNodes()
和appendNodes()
,以便我可以重新考虑一些用于<head>
和<body>
例程的代码。
function removeNodes(node) {
while (node.firstChild) {
console.log("removing: " + node.firstChild.nodeName);
node.removeChild(node.firstChild);
}
}
和
function appendNodes(iframe1Node, iframe2Node) {
var child = iframe1Node.firstChild;
while (child) {
if (child.nodeType === Node.ELEMENT_NODE) {
console.log("appending: " + child.nodeName);
if (child.nodeName === "SCRIPT") {
// We need to create the script element the old-fashioned way
// and append it to the DOM for IE to recognize it.
var script = iframe2.doc.createElement("script");
script.type = child.type;
script.src = child.src;
iframe2Node.appendChild(script);
} else {
// Otherwise, we append it the regular way. Note that we are
// using importNode() here. This is the proper way to create
// a copy of a node from an external document that can be
// inserted into the current document. For more, visit MDN:
// https://developer.mozilla.org/en/DOM/document.importNode
iframe2Node.appendChild(iframe2.doc.importNode(child, true));
}
}
child = child.nextSibling;
}
创建这些功能后,现在我们所要做的就是拨打电话:
console.log("begin removing <head> nodes of iframe2");
removeNodes(iframe2.head);
console.log("begin removing <body> nodes of iframe2");
removeNodes(iframe2.body);
console.log("begin appending <head> nodes of iframe1 to iframe2");
appendNodes(iframe1.head, iframe2.head);
console.log("begin appending <body> nodes of iframe1 to iframe2");
appendNodes(iframe1.body, iframe2.body);
...最后,我们关闭了window.onload
函数:
};