从 JavaScript 中恢复修改前的原始 HTML 或 DOM

Recover the original HTML or DOM before modification from JavaScript

提问人:SRobertJames 提问时间:4/22/2023 最后编辑:starballSRobertJames 更新时间:4/22/2023 访问量:61

问:

旧版网站在与当前浏览器不兼容时使用 JavasSript 删除某些元素。像这样:

if (!navigator.javaEnabled())
  document.getElementById('greenscreen').innerHTML = '<p>Not Supported on this browser';

有没有一种简单的方法可以恢复原始的HTML / DOM(至少是已删除的元素),或者确保我们的脚本在此脚本之前运行,或者以其他方式找出其中的内容?我们无法修改现有的 JavaScript,但需要以某种方式添加新的 JavaScript 来解析 HTML 并获取信息。#greenscreen#greenscreen

JavaScript DOM 事件

评论

2赞 Barmar 4/22/2023
不,原始 HTML 不会自动保存在任何地方。您需要在它之前运行的代码,然后它可以将 保存到变量中。innerHTML
0赞 SRobertJames 4/22/2023
@Barmar 如何确保我的代码在它之前运行?特别是考虑到使用自动的现代代码。async
0赞 Eric Fortis 4/22/2023
在 HTML 中,在旧版脚本加载器之前添加内联。顺便说一句,请包含HTML代码<script>window.oldGreen = document.getElementById('greenscreen').innerHTML;</script>
0赞 SRobertJames 4/24/2023
@Barmar 原始文件必须至少可供浏览器使用,因为 view-source 显示的是原始文件。

答:

1赞 starball 4/22/2023 #1

鉴于你的目标是解析一些 HTML,如果你不依赖于此网页运行的任何 JS 对 DOM 所做的任何修改,这里有一种方法是有效的:只需使用页面的 URL 执行 HTTP 请求 ()。例如,使用 Fetch API: .document.location.hrefawait (await fetch(document.location.href)).text()

如果你想在它上面使用 DOM 方法,那就把它变成一个文档:

(async function() {
  const html = await fetch(document.location.href)).text();
  const parser = new DOMParser();
  const doc = parser.parseFromString(html, "text/html");
  doc.getElementById("greenscreen");
  // TODO
})();