Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何(以编程方式)获取完全计算的HTML(而不是源HTML)?_Javascript_Jquery_Html - Fatal编程技术网

Javascript 如何(以编程方式)获取完全计算的HTML(而不是源HTML)?

Javascript 如何(以编程方式)获取完全计算的HTML(而不是源HTML)?,javascript,jquery,html,Javascript,Jquery,Html,我正在尝试学习jQuery并尝试构建一个Chrome扩展。我尝试解析一个加载了javascript和Ajax查询的网页来生成它的HTML,如何通过编程获得浏览器解析的最终计算HTML而不是源HTML 我的问题受到另一个问题的启发: 区别在于,我真的想了解这是否可行,以及如何通过编程实现,最好是使用JavaScript 我已经尝试使用: $(document).ajaxComplete() 但没有积极的结果 根据评论更新: 我没有访问代码的权限,我只能向网站发送get请求。然后,该网站将返回包含

我正在尝试学习jQuery并尝试构建一个Chrome扩展。我尝试解析一个加载了javascript和Ajax查询的网页来生成它的HTML,如何通过编程获得浏览器解析的最终计算HTML而不是源HTML

我的问题受到另一个问题的启发:

区别在于,我真的想了解这是否可行,以及如何通过编程实现,最好是使用JavaScript

我已经尝试使用:
$(document).ajaxComplete()

但没有积极的结果

根据评论更新:


我没有访问代码的权限,我只能向网站发送get请求。然后,该网站将返回包含ajax或javascript的页面源代码。我希望Ajax和JavaScript能够被呈现,这样我就可以解析从中产生的任何内容。

要在脚本执行后获得文档的标记,您必须将此标记附加到iframe或类似文件中。
然后,您将能够通过yourFrame.contentDocument.documentElement获得根节点

对您来说,最简单的方法是让AJAX调用直接返回一个Blob,这是我在下面的代码块中假设的,但您也可以从文本响应创建它,甚至可以将iframe的src设置为
“data:text/html”+encodeURIComponent(textResponse)

var-iframe=document.createElement('iframe');
//因为我们需要附加iframe以加载它,所以让我们隐藏它
iframe.width=iframe.height=0;
setAttribute('style','position:absolute;opacity:0;'))
$('body')。追加(iframe);//这是一个jQuery问题。。。
iframe.src=URL.createObjectURL(AJAXresponseAsBlob);
//这里我们将在页面加载时触发捕获
iframe.onload=函数(){
var outer=iframe.contentDocument.documentElement.outerHTML;
iframe.parentNode.removeChild(iframe);//我们不再需要它了
带(外部)的dosomething;
}
(因为堆栈片段是沙盒…)


*IIRC,关于如何访问iframe内容,有一些实现上的怪癖,但我会让你搜索它,这在过去已经被回答了很多次。

如果你说的是这样的话,你可以使用正则表达式删除所有HTML实体。不,我希望能够访问纯HTML(这意味着呈现所有非HTML组件),这样我就可以用jQuery解析它。没有意义。它已经可以用jQuery解析了。jQuery的
.HTML()
方法不是你想要的吗?$('HTML').HTML();将为您获取当前计算的html代码。您好,感谢您的回答和解释。我在扩展名中运行您的代码时出错:
运行时事件处理程序中出错。onMessage:ReferenceError:AJAXresponseAsBlob未定义
@Jack,您定义了此变量吗?或者您可以使用
'blob'创建XHR
responseType
,在这种情况下,它将是
var AJAXresponseAsBlob=XHR.response
,或者您以文本形式接收响应,在这种情况下,它应该是'var AJAXresponseAsBlob=newblob([XHR.response],{type:'text/html'))“我明白了,谢谢。现在我遇到了以下问题,
document.body.childNodes
返回一个节点数组,但是
array.prototype.filter.call(document.body.childNodes,函数(n){return n.nodeType==8;})
返回一个空数组。为什么?我也不太明白什么是
n.nodeType==8
does@Jack,这只是一个片段,因为我无法从JSFIDLE发出真正的xhr请求,所以我在注释中编写了标记。所以这部分只是在小提琴中获取注释。但是您不应该在自己的脚本中使用它,只使用回答中的de,其中AJAXrequest是来自您请求的响应。按照您的建议执行,使我的
AJAXresponseAsBlob=$(文档)
但是现在在运行时的事件处理程序中得到:
错误。onMessage:TypeError:未能在“URL”上执行“createObjectURL”:未找到与提供的签名匹配的函数。