我需要在 iframe 中加载几个网站,同时在每个页面中添加一个谷歌翻译插件,以便可以翻译它们。这是我插入部分的代码:
<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 和图像。此外,链接仍然指向原始 URL。我需要一些关于如何将 CSS、图像和 js 从目标 URL 拉到代理并从那里加载页面的建议,使其看起来像是来自相同的域和端口并通过相同的源策略。我还需要链接以这种方式工作。
例如:
main page - http://localhost:8888/proxy.php
links - http://localhost:8888/proxy.php/products/2012/shoes
也欢迎任何其他方法或替代方案。
谢谢