เมื่อส่งแบบฟอร์มไปยัง URL ข้ามโดเมนภายใน iframe จะทราบได้อย่างไรว่าการส่งสำเร็จหรือไม่
โดยพื้นฐานแล้วสิ่งนี้เป็นเรื่องยาก เนื่องจากเนื่องจากข้อจำกัดของแซนด์บ็อกซ์ความปลอดภัยของเบราว์เซอร์ เราจึงไม่มีทางรับข้อมูลเกี่ยวกับหน้าเว็บในโดเมนต่างๆ ภายใน iframe คิดแตกต่างออกไป หากคุณสามารถรับข้อมูลหน้าภายใน iframe ได้ในตอนแรก เมื่อคุณไม่สามารถรับได้ ก็ไม่ได้หมายความว่าส่งแบบฟอร์มไปแล้ว~
สมุดเยี่ยมชมศูนย์ธุรกิจที่ Baidu จัดทำขึ้นสำหรับผู้ใช้การประมูลใช้วิธีนี้
ตัวอย่าง:
test.html:
รหัสโปรแกรม
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head>
<body style="พื้นหลัง:#a7a7a7;">
<iframe id="testiframe" name="testiframe"></iframe>
<รูปแบบวิธีการ = "โพสต์" การกระทำ = " http://www.test.com/testaction.asp " target = "testiframe" ชื่อ = "testform">
<input type="text" name="dddd"><input type="submit" value="ddd" name="submitbtn"/>
</แบบฟอร์ม>
</ร่างกาย>
<สคริปต์>
document.testform.onsubmit = ฟังก์ชั่น () {
document.testform.submitbtn.disabled = จริง;
ส่งมอนิเตอร์()
;
ฟังก์ชั่น sendMonitor () {
พยายาม{
var hash = document.getElementById('testiframe').contentWindow.location.hash;
setTimeout (ส่งการตรวจสอบ, 100);
} จับ (e) {
document.getElementById('testiframe').src = "เกี่ยวกับ:ว่าง";
document.testform.submitbtn.disabled = เท็จ;
-
-
</สคริปต์>
</html>
รหัสโปรแกรม
testaction.asp
-
ฟังก์ชั่น Sleep(n) 'หน่วยวินาทีs
เวลาเริ่มต้นสลัว
เวลาเริ่มต้น = ตัวจับเวลา
ทำ: วนซ้ำจนถึงตัวจับเวลา>n+StartTime
ฟังก์ชั่นสิ้นสุด
การนอนหลับ (5) 'ล่าช้า 5 วินาที
การตอบสนองเขียนคำขอแบบฟอร์ม ("dddd")
-
ข้อเสีย:
ข้อเสียนี้ยังคงชัดเจน หากเป็นข้อผิดพลาด เช่น 404, 403, 500 เป็นต้น ก็จะเข้าใจผิดว่าเป็นการส่งสำเร็จ
รหัสโปรแกรม
setTimeout (ส่งการตรวจสอบ, 100);
เพิ่มการตรวจสอบแบบฟอร์มไคลเอ็นต์ก่อนฟังก์ชันเพื่อพยายามหลีกเลี่ยงปัญหานี้
แน่นอนว่า การพิจารณาสถานะการส่งแบบฟอร์มข้ามโดเมนสามารถทำได้โดยส่งออกสคริปต์การแจ้งเตือนทางฝั่งเซิร์ฟเวอร์