2011-05-04 62 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'

相關問題