Web ページを 2 つの部分で構成したいと考えています。上部にはテキストボックスがあります。ユーザーがテキスト ボックスに URL を入力すると、下部でその URL のコンテンツが参照されます。ユーザーが下部のリンクをクリックすると、下部が新しい URL に移動し、上部のテキスト ボックスが新しい URL に変わります。どうすればいいですか?
注: この動作は Google 翻訳 (例:ここ)と同じですが、翻訳はありません。
Web ページを 2 つの部分で構成したいと考えています。上部にはテキストボックスがあります。ユーザーがテキスト ボックスに URL を入力すると、下部でその URL のコンテンツが参照されます。ユーザーが下部のリンクをクリックすると、下部が新しい URL に移動し、上部のテキスト ボックスが新しい URL に変わります。どうすればいいですか?
注: この動作は Google 翻訳 (例:ここ)と同じですが、翻訳はありません。
同じ起源の問題
あなたが求めていることを達成する唯一の方法は、Google翻訳が行うこととまったく同じ方法です-サーバー側のスクリプトをプロキシリクエストとして使用することです:
上記は、Google 翻訳が翻訳済みページを表示するために使用する iframe から取得した URL です。注意すべき主な点は、URL のドメイン部分が親ページの URL と同じであることですhttp://translate.google.com
。フレームと親ウィンドウの両方が同じドメインを共有していない場合、親ウィンドウの JavaScript は内部の何にもアクセスできません。 iframe。ブラウザの組み込みセキュリティによってブロックされます。
プロジェクトで(同じドメイン上の)自分のページのみをナビゲートする場合、上記は明らかに問題にはなりませんが、例としてGoogle翻訳を提供していることを考えると、そうではないと思います。
Google はどうするでしょうか。
上記の URL が行うことは、サーバー側にウィキペディアのページをフェッチして返すように依頼することです。これにより、iframe で表示できるようになりますが、iframe からは、このページはtranslate.google.com
ではなく でホストされているように見えますwikipedia
。これは、iframe が親ウィンドウと同じオリジン内に留まり、JavaScript を使用して iframe 内のページを編集または変更できることを意味します。
プロキシされたコンテンツを書き換える
基本的に私が言いたいのは、これは HTML とクライアント側の JavaScript だけでは達成できないということです。サーバー側、つまり PHP、Python、Ruby、Lisp、Node.. などから何かを支援する必要があります。 . このスクリプトは、プロキシされたページが正しく表示/レンダリングされるようにする責任があります。たとえば、元のサーバーの content/images/css への相対リンクが壊れていないことを確認する必要があります(タグを使用するbase
か、相対リンクを物理的に書き換えることができます) 。また、サイトの利用規約に従って、これをサイトの違法使用と見なすサイトも多数あるため、サービスからブラック リストに登録する必要があります。
ユーザーがプロキシから離脱できないようにする
プロキシ スクリプトを作成したら、iframe (古いフレームセットの使用は避けてください) をonload
使用し、 iframeの JavaScript マジックを使用ondomready
して、ページ内のすべてのリンク、フォーム、ボタンを書き換えます。これは、クリックまたは送信されたときに、元の宛先ではなくプロキシ スクリプトに投稿されるようにするためです。u
この書き換えコードは、Google 翻訳 URL のように、元の宛先をプロキシ スクリプトに送信する必要もあります。これを並べ替えると、iframe が新しい宛先コンテンツでリロードされることを意味しますが、重要なことに、iframe は同じドメインにとどまります。
私だったら、個人的にあなたの戦略を再考します
全体として、これは単純な作業ではなく、100% 完全に保証されているわけでもありません。これは、問題を引き起こす原因が多数あるためです。
Google がそれを行うことができる理由は、彼らには多くの時間、お金、およびリソースがあるからです。Google 翻訳の多くは、実際には JavaScript ではなくサーバー側で処理されます。
自分のサイトをナビゲートするユーザーを追跡する場合:
サイトにアクセスしてからワールド ワイド ウェブの残りの部分に移動するユーザーを追跡する場合は、次のようにします。
2番目のフレームにjavascript関数を追加します-
<frame id="dataframe" src="frame_a.htm" onload="load()">
テキストボックスにIDを持たせます-「テスト」と言います
function load()
{
document.getElementById('test').value=document.getElementById('dataframe').src
}