2011-05-04 75 views
1

我目前正在开发一个Clicktail克隆。我记录了所有的鼠标交互和窗口卷轴,我的计划是打开已记录到iframe中的URL,然后让鼠标图像移动到捕获的坐标,指示何时发生点击的图像以及iframe滚动到捕获的滚动位置滚动包含来自不同域的页面的iframe

这很好用,而我在iframe中查看我的域中的页面,但只要我显示来自不同域的页面,就会从FF控制台获取访问被拒绝的错误并从IE相同的问题

这是由于JavaScript的相同来源政策。

我一直在阅读这篇文章 - >Ways to circumvent the same-origin policy

似乎这正成为不少开发商的问题,并有黑客以避开它。

任何人都可以为我的情况提出一个合适的黑客?

回答

1

你总是可以伪造它。也许你可以把你的iframe放在一个容器div(css:overflow: hidden; height: /* some height */)中,并将iframe元素设置为页面的整个高度,然后滚动div?

1

您可以在您的域上使用PHP代理(a)将目标URL读入字符串,(b)添加base标签,以便图像,链接等正常工作,然后(c)打印字符串。

最终结果是与来自外部域的页面完全相同,但托管在您的域上的页面。这意味着您可以在父框架的子框架中执行JavaScript。

为代理的代码如下:

<?php 
    ini_set("user_agent", $_SERVER['HTTP_USER_AGENT']); // temporarily override CURLs user agent with the user's own 

    $page = file_get_contents($_REQUEST["www"]); 
    $page = preg_replace("/<[\s]*head[^>]*>/i", "<head><base href='".$_REQUEST["www"]."' /><base target='_blank' />", $page); 
    echo $page; 
?> 

一个考虑使用这种方法时是,当用户(或JavaScript)点击在代理页面的链接,则用户将被带到一个原始网域(或其他地方)的网页。这意味着您的JavaScript将不再能够访问或执行iframe中的脚本。

为了使这个结果更加透明,在上面的代码中将链接设置为target='_blank'

相关问题