【问题标题】:Source code of HTML page without Framework [duplicate]没有框架的HTML页面的源代码[重复]
【发布时间】:2013-07-03 14:25:29
【问题描述】:

问题几乎总结了它。我无权访问框架,我需要获取当前页面的完整 HTML 源代码。有没有一些 JS 原生支持的命令?

为了记录,我已经尝试过:

document.getElementsByTagName('html')[0].innerHTML

【问题讨论】:

  • 那个解决方案有什么问题?
  • 我看不出你所拥有的还不够好。
  • 然后用outerHTML改变innerHTML
  • 你仍然会错过 doctype 之类的东西。通过 AJAX 获取页面可能是您想要的?
  • @BigMike 当然,一切都取决于你想要什么。价值与成本:-)

标签: javascript


【解决方案1】:

这可以使用XMLSerializer 一次性完成。

var generatedSource = new XMLSerializer().serializeToString(document);

这给出了字符串

<!DOCTYPE html><html><head>

<title>javascript - Source code of HTML page without Framework - Stack Overflow</title>
...

【讨论】:

  • 酷,不知道!点赞
  • 这太棒了,但它似乎删除了一些以前存在的空格和回车?
  • @Chris 这是一个** 生成的 ** 来源,而不是原始 来源。浏览器对原始源的解析是那些空格和新行被删除(甚至添加)的地方。
  • 我猜这和我要接近原始来源一样接近?
  • @Chris 我知道的唯一接近的方法是使用 ajax 重新请求页面。
【解决方案2】:

我认为不可能从当前页面获得完整的、实际的、实时的页面源。 (编辑:看起来,这是可能的!见@Paul S.他的回答)

但是您可以做些什么来加载初始的、未更改的 HTML,只需通过 AJAX 加载页面,然后检查服务器返回的页面源。

$.get(document.location.href, function(response) { 
    window.console.log(response);
});

这是使用 jQuery,但您也可以使用

变量 xmlhttp; 如果(window.XMLHttpRequest){ // IE7+、Firefox、Chrome、Opera、Safari 的代码 xmlhttp=新的 XMLHttpRequest(); } 别的 { // IE6、IE5 的代码 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { 如果(xmlhttp.readyState==4 && xmlhttp.status==200){ window.console.log(xmlhttp.responseText); } } xmlhttp.open("GET",document.location.href,true); xmlhttp.send();

【讨论】:

  • 你为什么要使用 AJAX 来获取你已经在的页面的源代码?
  • 获取 Javascript 实际运行的页面的源代码是不是太复杂了?很好的解决方案来获取另一个页面的来源!
  • @j08691 因为您将获得原始源代码,而不是当前(可能已更改)的源代码。
  • 我这样做的原因是为了检查数据的变化,这样当后端发生变化时,我可以自动重新加载网页。我完全按照您指定的方式使用 AJAX 来获取服务器的 HTML 副本。现在我需要获取 HTML 的本地副本以检查是否存在差异。逻辑是,如果有差异,后端发生了变化,页面应该刷新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 2014-10-03
  • 1970-01-01
  • 2014-07-02
相关资源
最近更新 更多