2 回答
TA贡献1804条经验 获得超7个赞
我不确定是什么打破了第三代克隆,因此它导致js信息输出到页面,但是使用实际文档对象来克隆/操作原始文件并输出其内容可能会更好Blob对象的字符串。例如,我使用您的基本saveFile.html进行了测试,并进行了以下更改:
//remove original clone var and replace with:
var clone = document.cloneNode(true);
// grab textarea elements from both original document and clone:
var doc_input = document.getElementsByTagName("textarea")[0];
var clone_input = clone.getElementsByTagName("textarea")[0];
// set clone textarea's innerHTML to current textarea value:
clone_input.innerHTML = doc_input.value;
// use outerHTML of clone.documentElement to get string for Blob
var clone_string = [clone.documentElement.outerHTML];
var file = new Blob([clone_string], {"type":"text/html"});
我看到的唯一缺点是:
这可能很难扩展到更通用的框架,用于生成当前加载的HTML页面状态的“实时HTML文件”(尽管它不应该比您的示例方法更复杂)。
返回的字符串clone.documentElement.outerHTML似乎将文档类型声明放到一个简单元素中,以便:
不在输出字符串中。你可以使用类似的东西:
var clone_string = ["<!doctype html>" + clone.documentElement.outerHTML];
作为一种解决方法。或者,对于更强大的东西:
var doc_doctype = new XMLSerializer().serializeToString(document.doctype);
var clone_string = [doc_doctype + clone.documentElement.outerHTML];
添加回答
举报