gpt4 book ai didi

javascript - 从 iframe 中抓取父页面 html

转载 作者:行者123 更新时间:2023-11-30 18:47:14 25 4
gpt4 key购买 nike

我有一个 iframe,用于从其父页面生成 PDF。 PDF 生成器 (ABCpdf) 需要一个 HTML 文件,然后进行转换。

我目前所做的是使用以下方法抓取父级的 HTML:

var temp;
temp=parent.document.body.parentNode.innerHTML;

然后我使用 iframe 中的表单将其提交到服务器,在服务器上删除诸如 iframe 部分之类的内容,然后再保存为 PDF 制造商的临时 HTML 文件。

但是生成的 HTML 代码被破坏了,带有 <BODY>而不是 <body>等,并删除 ID 周围的引号等。

有没有更好的方法来抓取 HTML?

我不将页面重新生成为 HTML 的原因是父页面是一个复杂的报告。它包含各种控件,允许用户显示/隐藏部分或对表格中的行进行排序。所以我得到的 HTML 必须反射(reflect)用户定制。

谢谢

最佳答案

正如 David 提到的,使用 innerHTML,您几乎只能听任浏览器摆布。如果你想控制序列化,你可以自己遍历父文档的 DOM,将节点的字符串表示附加到缓冲区。这将花费更长的时间并涉及更多代码,但会导致对输出的完全控制。

像这样的东西(伪代码):

function serializeAttributes(node, buffer) {
for (attribute in node.attributes) {
buffer.append(' ' + attribute.name + '="' + attribute.value + '"');
}
}

function serializeChildren(node, buffer) {
for (child in node.childNodes) {
if (child is a text node) {
buffer.append(child.value);
} else if (child is an element) {
// You can also add checks to avoid going into IFrames, etc.
serializeElement(child, buffer);
}
}
}

function serizalizeElement(node, buffer) {
buffer.append('<' + node.tagName);
serializeAttributes(node, buffer);
if (node.hasChildren) {
buffer.append('>');
serializeChildren(node, buffer);
buffer.append('</' + node.tagName + '>');
} else {
buffer.append('\>');
}
}

serializeNode(window.parent.document);

关于javascript - 从 iframe 中抓取父页面 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5094707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com