Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.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 Can';t刮除#文档元素内的元素_Javascript_Jquery_Html_Iframe_Web Scraping - Fatal编程技术网

Javascript Can';t刮除#文档元素内的元素

Javascript Can';t刮除#文档元素内的元素,javascript,jquery,html,iframe,web-scraping,Javascript,Jquery,Html,Iframe,Web Scraping,对于我的一个Chrome扩展项目,我通过动态填充其src属性,在当前网页的标记中获取了另一个网页的HTML内容。现在,我想从标记内部刮取一些值。但是jQuery总是将这个标记显示为空。我使用的原因是,在抓取的页面中有一些JavaScript文件,我希望在开始抓取之前执行这些文件。我还尝试设置等待计时器,但jQuery总是将标记显示为空(尽管设置了src属性) 经过调查,我发现中有一个奇怪的#document值,后面是正常的HTML标记。我想知道这是否就是jQuery无法通过标记内的DOM层次结构

对于我的一个Chrome扩展项目,我通过动态填充其src属性,在当前网页的
标记中获取了另一个网页的HTML内容。现在,我想从
标记内部刮取一些值。但是jQuery总是将这个
标记显示为空。我使用的原因是,在抓取的页面中有一些JavaScript文件,我希望在开始抓取之前执行这些文件。我还尝试设置等待计时器,但jQuery总是将
标记显示为空(尽管设置了src属性)

经过调查,我发现
中有一个奇怪的
#document
值,后面是正常的HTML标记。我想知道这是否就是jQuery无法通过
标记内的DOM层次结构递归的原因

请参见下面所需
标签的“检查”视图屏幕截图

此外,
标记所在的主网页与新获取页面url位于同一网站上(尽管是不同的子域)。我在Chrome中没有收到任何访问权限警告,所以我不怀疑这是一个跨域问题

编辑:
即使在10秒后等待:

console.log($("#insertHere").text());
返回空。以及

console.log($("#insertHere").parent().html());

返回:

您可以使用以下代码获取iframe内容:

$('#insertHere').contents().find("html").html();


$('#insertHere').contents().find("#MathJax_Message").text();
如果iframe位于另一个域上(您的情况似乎不是这样),浏览器的跨站点脚本(XSS)保护将阻止它。文档是iframe DOM的页面文档对象

尝试访问iframe的
文档
,例如

var frame = document.getElementById('#hidden-frame');
console.log(frame.document.body);

您还可以尝试使用并允许它与
一起使用,后者应与iframe内容一起加载,并使用它通过消息传递将内容发送到
后台脚本。

不幸的是,$('#insertHere').contents()也是空的。而且,我看不到Chrome关于XSS的任何警告。(虽然插件的“内容脚本”获取的网站会重定向到当前网站的子域。)您是否可以进行测试并查看iframe是否可以访问主父页面(如果您在正在加载的iframe页面中拥有控制权)?否则,有一种很好的方法可以使来自不同域的Commcommunicate 2页面:您可以使用类似“pusher”的在线服务,这将在页面之间建立一个通道……在这里,您的域/子域是有限的。如果你感兴趣,我可以给你工作代码。显然,您需要能够在您想要删除的iframe内容中添加推送程序代码。我试图从iframe中访问父页面,但出现了以下错误:“SecurityError:阻止具有原点的帧访问跨原点帧”。因此,同一网站的子域似乎被视为跨源案例。我用dig命令进行了测试,得到了域和子域的不同IP地址。所以,这可能是失败的原因。听起来很有趣。请分享代码。:)