iframe 内のクロスドメイン URL にフォームを送信する場合、送信が成功したかどうかを確認するにはどうすればよいですか?
ブラウザのセキュリティ サンドボックスの制限により、iframe 内の異なるドメインにあるページに関する情報を取得する方法がないため、これは基本的に困難です。逆に考えると、最初にiframeのページ内部情報が取得できていれば、取得できなくなった時点でフォームが送信されたということになるのではないでしょうか~
Baidu が入札ユーザー向けに提供するビジネス センター ゲストブックはこの方法を使用しています。
例:
test.html:
プログラムコード
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head>
<body style="background:#a7a7a7;">
<iframe id="testiframe" name="testiframe"></iframe>
<form method="post" action=" http://www.test.com/testaction.asp " target="testiframe" name="testform">
<input type="text" name="dddd"><input type="submit" value="ddd" name="submitbtn"/>
</form>
</body>
<スクリプト>
document.testform.onsubmit = function () {
document.testform.submitbtn.disabled = true;
送信モニター()
;
関数 submitMonitor () {
試す{
var hash = document.getElementById('testiframe').contentWindow.location.hash;
setTimeout(submitMonitor,100);
} キャッチ (e) {
document.getElementById('testiframe').src = "about:blank";
document.testform.submitbtn.disabled = false;
}
}
</script>
</html>
testaction.asp
プログラム コード
<%
関数 Sleep(n) '単位は秒 s
ディムスタートタイム
開始時間 = タイマー
実行: Timer>n+StartTime までループします
End Function
Sleep(5) '5 秒遅延
Response.Write Request.Form("dddd")
%>
短所:
ただし、404、403、500 などのエラーの場合は、送信が成功したと誤解される可能性があります。
プログラムコード
setTimeout(submitMonitor,100);
この問題を回避するには、関数の前にクライアント フォーム チェックを追加します。
もちろん、サーバー側でアラートスクリプトを出力することで、クロスドメインのフォーム送信状況判定を実現することも可能です。