2013-01-19 41 views
-2

我需要加载多个网站在iframes,同时也添加谷歌翻译插件到每个页面,以便他们可以被翻译。这里是我的插入部分的代码:使用cURL检索网站,并绕过相同的原点限制,插入javascript

<iframe onload="googleJS1(); googleJS2(); googleJS3();" class=iframe2 src=http://localhost:8888/mysitep></iframe> 

<script> 
    function googleJS1() { 
     var iframe = document.getElementsByTagName('iframe')[0]; 
     var doc = iframe.contentWindow.document; 
     var newScript = doc.createElement('div'); 
     newScript.setAttribute("id", "google_translate_element"); 
     var bodyClass = doc.getElementsByTagName('body')[0]; 
     bodyClass.insertBefore(newScript, bodyClass.childNodes[0]); 
    } 

    function googleJS2() { 
     var iframe = document.getElementsByTagName('iframe')[0]; 
     var doc = iframe.contentWindow.document; 
     var newScript = doc.createElement('script'); 
     newScript.setAttribute("src", "http://translate.google.com/translate_a/element.js? cb=googleTranslateElementInit"); 
     var bodyClass = doc.getElementsByTagName('head')[0]; 
     bodyClass.insertBefore(newScript, bodyClass.childNodes[1]); 
    } 

    function googleJS3() { 
     var iframe = document.getElementsByTagName('iframe')[0]; 
     var doc = iframe.contentWindow.document; 
     var newScript = doc.createElement('script'); 
     newScript.setAttribute("src", "http://localhost:8888/mysite/google.js"); 
     var bodyClass = doc.getElementsByTagName('head')[0]; 
     bodyClass.insertBefore(newScript, bodyClass.childNodes[2]); 
    } 
} 
</script> 

只要iframe目标URL位于同一台服务器上,它就会工作。我阅读绕过相同的原点约束我应该建立一个代理服务器,并通过代理传递所有的URL请求。所以我读了cURL,并试图作为一个测试:

<?php 

function get_data($url) { 
    $ch = curl_init(); 
    $timeout = 5; 
    curl_setopt($ch,CURLOPT_USERAGENT, $userAgent); 
     curl_setopt($ch,CURLOPT_URL,$url); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); 
    curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    return $data; 
} 

$test = get_data("http://www.selfridges.com"); 
echo $test; 

?> 

基本的HTML元素被加载,但没有CSS和图像加载。此外,链接仍指向原始网址。我需要一些建议,关于如何将CSS,图像和js从目标网址拖放到代理中,并从那里加载网页,使其看起来像来自相同的域和端口,并且通过传递相同的原始策略。我也需要链接以这种方式工作。

e.g:

main page - http://localhost:8888/proxy.php 

links  - http://localhost:8888/proxy.php/products/2012/shoes 

任何其他方法或替代方案,也欢迎。

感谢

+3

使用useragent模仿GoogleBot可能是一个坏主意。 –

+0

这是_is_测试代码 –

+0

然后你不需要一个useragent - curl会自动发送一个。 –

回答

0

假设所有的链接在目标文件&图像是相对的,你可以注入一个base标签入目。这将有效地使链接绝对,所以链接&图像仍然会引用目标域(不是你的)。

http://reference.sitepoint.com/html/base

不知道如何做到这一点的CSS图像的工作,虽然。

对于任何目标站点一致工作的解决方案将是艰难 - 您需要解析出链接,不仅在html中,而且在任何CSS引用。有些网站可能会使用AJAX来填充页面,这也会在目标网站上导致相同的原始策略问题。

+0

我假设它会类似于这个问题的解决方案http://stackoverflow.com/questions/6326297/load-external-sites-content其中所有的链接只需要解析,让他们我的“ localhost:8888 /“。 你会说使用wget下载整个网站,然后运行那个关闭我的服务器将是一个解决方案? wget能够下载动态php网站吗? –

+0

是的,但网站将不再动态 –

+0

让我们的网站使用Wordpress或其他CMS,用wget下载后,内容仍然可以静态格式访问,或者他们不会工作? –