0

私はiframeを持っています。iframe 内の特定のリンクをクリックすると、サーバー側でエラー検証が発生し、続いてサーバー側からリダイレクトが発生します。これで、リダイレクトによってページが iframe 内に読み込まれます。親ページでリダイレクトを発生させる方法はありますか? クライアント側の検証であれば、それが可能であることはわかっています。ただし、これはサーバー側の検証であり、リダイレクト コマンドはサーバーから発生します。リダイレクトでは、エラー div として表示されるエラー属性も読み込んでいます。これでも iframe 内にロードされます。(エラー div のある iframe 内の iframe)。

4

4 に答える 4

0

同じプロトコルを使用している場合にのみ、メイン ウィンドウと iframe の間で通信できます。

これを行う「正しい」方法は、postMessageを使用することです。ここここに2 つの使用例があります。正しい道は長い。

手っ取り早い方法:
次の例では、外側のウィンドウに、iframe がリロードされるたびに呼び出される change() という JS 関数があります。これを使用して、エラーが発生したときにのみ表示されている div を検出し、リダイレクトすることができます。以下の例は、ycombinator の Web サイトにリダイレクトします。ここで見ることができます

<html>
   <head>
   <script type="text/javascript">
     function change(obj){
       var iframe = document.getElementById('iFrm');
       var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
       var obj = innerDoc.getElementById('completed');
       if(obj !== undefined && obj !== null){
           window.location = "https://news.ycombinator.com/";
       }
     }
     </script>         
        </head>
        <body>
         <div class="keuzeDiv">
                <iframe id="iFrm"  src="https://sandbox.plimus.com/jsp/buynow.jsp?contractId=2138644" onLoad="change();" width="100%" height="100%"></iframe>
                </div>
        </body>
</html>
于 2013-09-20T05:04:37.660 に答える
0

サーバーの出力を変更したくないが、迅速で汚い解決策を探している場合は、次のようなことができるかもしれません:

参照: iFrame src 変更イベントの検出?

リダイレクト先のページの場所を確認し (問題がある場合)、IFRAME の場所が 2 回目に変更されたときに (最初の場所は IFRAME が最初に読み込まれたときであるため)、メイン ウィンドウをそのページにリダイレクトできます。興味を持っている。

(入力の検証に Ajax リクエストを使用するのではなく、なぜ IFRAME を使用するのかという質問もできると思います)。

于 2013-09-20T05:05:32.943 に答える
0

A が親ページで、B がフレーム内の子ページだとします。

サーバーの検証に失敗した場合、ページ A ではなく B またはエラー ページ C にリダイレクトしないでください。

ハッシュチェンジができるなら、これはハックだと思います

  • サーバーの検証が失敗した場合、URL の最後に /#notvalid を追加してページ B にリダイレクトする
  • 親ページ A で B を運ぶ iframe のロード イベントをリッスンし、iframe の src の末尾に「#notvalid」があるかどうかを確認します。はいの場合は、親ページにエラー div を表示してください。
于 2013-09-20T05:28:09.487 に答える