我需要加载多个网站在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
任何其他方法或替代方案,也欢迎。
感谢
使用useragent模仿GoogleBot可能是一个坏主意。 –
这是_is_测试代码 –
然后你不需要一个useragent - curl会自动发送一个。 –