1

わかりました、これは「iframe src がいつ変更されたかを検出する方法」の質問に似ていますが、同じではありませ。私が言いたいのは、私はその中にGoogleを含むiframeを持っているということです(私は退屈だったのでウェブベースのOSで作業を始めたばかりです。http://dextive.com/russellsayshi/os/を確認してください)が、問題はGoogleがiframe での表示をブロックするヘッダー。

私がこれまでに回避した方法は、この単純なソースを使用して PHP ページを作成することでした (私の PHP 初心者を許してください)。

<?php
echo "<base href='".$_GET['url']."'>";

$site=file_get_contents($_GET['url']);

echo $site;
?>

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
<script type="text/javascript">
$("a").click(function() {
    var href = this.href;
    var baseURL = "overridexframe.php?url=";
    window.location = baseURL + href;
    return false;
});
</script>

This works great, and having the iframe source set to overridexframe.php?url=(url goes here) works great, until you try a search. As you can see above, I have jQuery fixing links, but when it tries to change it using javascript, it is not going to my specified override URI. Does anyone know a way to try and catch when an iframe tries to change, but can’t, so I can apply JS to it?

4

2 に答える 2

0

いいえ、フレームがJavaScriptのみを使用して新しいURLを要求することを検出する公式の方法はありません。可能であれば、セキュリティ上の影響がかなりある可能性があるためです。これを達成する(そしてフレームが進む場所でワークアウトできるようにする)唯一の方法は、ユーザーが他の場所に移動できるそれぞれの可能な方法の前に介入することです。ページを別の場所に移動させる方法はたくさんあります。

  1. リンクをクリックする
  2. フォームの送信
  3. アドレスバーに入力する
  4. window.locationをトリガーするjavascript/プラグイン
  5. メタリフレッシュタグ
  6. ターゲットを_selfまたは_topとして使用してwindow.openを要求するjavascript/プラグイン

上記の一部のみが「オーバーライド可能」であり、それでも完全に信頼できるわけではありません...そのため、このプロジェクトが学習または楽しみのためだけのものでない限り、現在の方法で続行しないことをお勧めします。別のサイトのソースを取得して自分のサイト内に出力すると、あらゆる種類のコーディングの問題が発生します...著作権と利用規約に関する法的な影響は言うまでもありません。

とにかく、あなたの質問に答える精神で、あなたはおそらくリンクオーバーライドだけでなく、次のようなフォーム送信オーバーライドを作成することによってグーグルの「検索」問題を修正することができます:

$('form').submit(function(){

    var form = $(this);

    /// this code will allow you to hijack any forms that try to submit
    /// and stop them submitting, whilst at the same time allowing you
    /// to do something else instead.

    return false;
});

ただし、上記の問題は、送信されるフォームをオーバーライドパスに追加できる単純なGETURLに変換するjavascriptをコーディングする必要があることです。これは、フォームがGETを介して情報を送信するように設計されている場合に実行可能です(幸いなことにGoogleがこれを行います)。これについては、以下のリンクで説明されています(jQueryコメントを探してform.serializeArrayください。AJAXの代わりにこれを使用してURLを生成できます) :

単純なフォーム送信をajax呼び出しに変換する方法。

Javascriptでクエリ文字列を作成する方法

ただし、フォームが代わりにデータをPOSTする場合、使用しているメソッドは、かなり複雑で信頼性の低いものが大量に実装されていないと機能しません...考えてみると、POSTされたフォームを表すためにどのURLを使用しますかすべてのデータですか?--うん、データのないフォームとまったく同じURL。

簡単に言えば、このシステムをGoogleのスクリーンスクレイプよりも多くのページをカバーするように拡張したい場合は、別の方法でやりたいことを考えます。

于 2012-09-28T00:15:43.063 に答える
0

ここで何を達成しようとしていますか?「OS」にポップアップ「ブラウザ」が表示されます。ブラウザのポップアップに表示されているページを制御したい場合(問題のiFrameがある場所だと思います)、サーバー側の使用を検討しましたかiFrame を処理するためのスクリプト言語 (おそらく PHP)?

PHP を想定すると、次のように動作します。

cURL または file_get_contents() を使用して、表示するページを取得します。ページは PHP になりました。検索/置換を実行して、すべての href 値を操作し、URL を次のように変更します。

href="local_handler.php?target=orig_url"

見つけたフォーム ターゲットに対してもこれを行います。次に、「local_handler.php」スクリプトですべてのログを処理します。

この結果、iFrame を完全に失うことができるようになりました。外部サイトのコードが元のウィンドウ内に表示されるようになりました。スタイリングの問題や、競合する JS の問題が発生している可能性があります。

于 2012-09-30T12:40:22.413 に答える