私はiframeを持っています。iframe 内の特定のリンクをクリックすると、サーバー側でエラー検証が発生し、続いてサーバー側からリダイレクトが発生します。これで、リダイレクトによってページが iframe 内に読み込まれます。親ページでリダイレクトを発生させる方法はありますか? クライアント側の検証であれば、それが可能であることはわかっています。ただし、これはサーバー側の検証であり、リダイレクト コマンドはサーバーから発生します。リダイレクトでは、エラー div として表示されるエラー属性も読み込んでいます。これでも iframe 内にロードされます。(エラー div のある iframe 内の iframe)。
4 に答える
同じプロトコルを使用している場合にのみ、メイン ウィンドウと 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>
サーバーの出力を変更したくないが、迅速で汚い解決策を探している場合は、次のようなことができるかもしれません:
リダイレクト先のページの場所を確認し (問題がある場合)、IFRAME の場所が 2 回目に変更されたときに (最初の場所は IFRAME が最初に読み込まれたときであるため)、メイン ウィンドウをそのページにリダイレクトできます。興味を持っている。
(入力の検証に Ajax リクエストを使用するのではなく、なぜ IFRAME を使用するのかという質問もできると思います)。
A が親ページで、B がフレーム内の子ページだとします。
サーバーの検証に失敗した場合、ページ A ではなく B またはエラー ページ C にリダイレクトしないでください。
ハッシュチェンジができるなら、これはハックだと思います
- サーバーの検証が失敗した場合、URL の最後に /#notvalid を追加してページ B にリダイレクトする
- 親ページ A で B を運ぶ iframe のロード イベントをリッスンし、iframe の src の末尾に「#notvalid」があるかどうかを確認します。はいの場合は、親ページにエラー div を表示してください。