阅读IFrame中的document.links

时间:2011-07-25 11:41:13

标签: javascript html dom iframe xss

编辑: 只是快速提一下这个程序的性质。该计划的目的是用于网络库存。将不同的链接和其他内容绘制成一种层次结构。我遇到的问题是从IFrame中的网页中提取链接列表。


我觉得这个人会很难咬我。 (其他帖子表示与xss和域控件的相关性)

我只是尝试使用javascript和iframe。基本上我有一个带有IFrame的面板,可以访问你想要的任何网站。我正在尝试从Iframe中的网页生成链接列表。它严格只读。

然而,我一直反对拒绝许可的问题。

我知道这是为了阻止跨站点脚本攻击,解决方案似乎是将文档域设置为主机站点。 JavaScript permission denied. How to allow cross domain scripting between trusted domains?

但是,如果我试图从一个站点到另一个站点,我不认为这会有效。

这是我到目前为止的代码,非常简单:

function getFrameLinks()
{
/* You can all ignore this. This is here because there is a frame within a frame. It should have no effect ont he program. Just start reading from 'contentFrameElement'*/


//ignore this
var functionFrameElem = document.getElementById("function-IFrame");
console.log("element by id parent frame ");
console.log(functionFrameElem);
var functionFrameData = functionFrameElem.contentDocument;
console.log("Element data");
console.log(functionFrameData);

//get the content and turn it into a doc
var contentFrameElem = functionFrameData.getElementById("content-Frame")
console.log(contentFrameElem);
var contentFrameData = contentFrameElem.contentDocument;
console.log(contentFrameData);

//get the links
//var contentFrameLinks = contentFrameData.links;
var contentFrameLinks = contentFrameData.getElementsByTagName('a');

目标:好的,因为这是非法的,非常类似于XSS。也许有人可以指出如何在本地存储文档的解决方案。我似乎没有任何问题访问框架内部页面的document.links。

可能是某种临时缓存数据库。解决方案越简单越好。

3 个答案:

答案 0 :(得分:0)

如果您只想为自己和浏览器阅读它,您可以在服务器中使用php编写一个简单的代理。最简单的代码:

<?php /* proxy.php */ readfile($_GET['url']); ?>

现在将iframe src设置为您的代理文件:

<iframe src="http://localhost/proxy.php?url=http://www.google.com"
id="function-IFrame"></iframe>

现在您可以从(本地)服务器访问iframe内容。 如果你想用程序设置url,请记住编码url(php中的urlencode或js中的encodeURIComponent)

答案 1 :(得分:0)

这是一个可以在任何页面上运行的书签(假设链接不在iframe中)

javascript:var x=function(){var lnks=document.links,list=[];for (var i=0,n=lnks.length;i<n;i++) {var href = lnks[i].href;  list.push(href)};if (list.length>0) { var w=window.open('','_blank');w.document.write(list.length+' links found<br/><ul><li>'+list.sort().join('</li><li>')+'</ul>');w.document.close()}};void(x());

另一种方法是(在Windows上)以扩展名.HTA保存HTML 然后你可以抓住iFrame中的所有生命

答案 2 :(得分:0)

您可能有兴趣使用YQL (Yahoo Query Language)从远程网址中检索过滤结果。

检索all the links from the yahoo.com domain

的示例