Saat mengirimkan formulir ke URL lintas domain dalam iframe, bagaimana cara menentukan apakah pengiriman berhasil?
Hal ini pada dasarnya sulit dilakukan, karena keterbatasan kotak pasir keamanan browser, kami tidak memiliki cara untuk memperoleh informasi tentang halaman di domain berbeda dalam iframe. Berpikir berbeda, jika awalnya Anda dapat memperoleh informasi halaman internal iframe, kemudian ketika Anda tidak dapat memperolehnya, bukan berarti formulir telah dikirimkan~
Buku tamu pusat bisnis yang disediakan oleh Baidu untuk pengguna penawaran menggunakan metode ini.
Contoh:
test.html:
kode program
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head>
<gaya tubuh="latar belakang:#a7a7a7;">
<iframe id="testiframe" nama="testiframe"></iframe>
<form method="post" action=" http://www.test.com/testaction.asp " target="testiframe" name="testform">
<input type="text" name="dddd"><input type="kirim" value="ddd" name="submitbtn"/>
</bentuk>
</tubuh>
<skrip>
dokumen.formulir tes.onsubmit = fungsi() {
document.testform.submitbtn.disabled = benar;
kirimMonitor();
}
fungsi kirimMonitor() {
mencoba{
var hash = document.getElementById('testiframe').contentWindow.location.hash;
setTimeout(kirimMonitor,100);
} tangkapan (e) {
document.getElementById('testiframe').src = "tentang:kosong";
document.testform.submitbtn.disabled = salah;
}
}
</skrip>
</html>
kode program
testaction.asp
<%
Fungsi Tidur(n) 'Satuan detik s
Redupkan Waktu Mulai
Waktu Mulai = Pengatur Waktu
Lakukan: Ulangi Hingga Timer>n+Waktu Mulai
Fungsi Akhir
Tidur(5) 'Tunda 5 detik
Respon.Tulis Permintaan.Formulir("dddd")
%>
Kekurangan:
Kerugian ini masih terlihat jelas, jika error seperti 404, 403, 500, dll, maka akan disalahartikan sebagai pengiriman yang berhasil
kode program
setTimeout(kirimMonitor,100);
Tambahkan pemeriksaan formulir klien sebelum fungsi untuk mencoba menghindari masalah ini.
Tentu saja, penilaian status pengiriman formulir lintas domain juga dapat diterapkan dengan mengeluarkan skrip peringatan di sisi server.