-1

翻訳できるように、各ページにGoogle翻訳プラグインを追加しながら、iframeにいくつかのWebサイトをロードする必要があります。挿入部分のコードは次のとおりです。

<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

他の方法や代替手段も大歓迎です。

ありがとう

4

1 に答える 1

1

baseターゲット ドキュメント内のすべてのリンクと画像が相対的なものであると仮定すると、head にタグを挿入できます。これにより、リンクが実質的に絶対的なものになるため、リンクと画像は引き続きターゲットドメインを参照します(あなたのドメインではありません).

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

ただし、これが css イメージでどのように機能するかはわかりません。

どのターゲット サイトでも一貫して機能するソリューションは、難しいものになるでしょう。html だけでなく、すべての css 参照でリンクを解析する必要があります。一部のサイトでは、AJAX を使用してページにデータを入力する場合があります。これにより、ターゲット サイトでも同一オリジン ポリシーの問題が発生します。

于 2013-01-19T21:47:57.217 に答える