iframe 내의 교차 도메인 URL에 양식을 제출할 때 제출 성공 여부를 어떻게 확인합니까?
이는 기본적으로 어려운 일입니다. 브라우저 보안 샌드박스의 제한으로 인해 iframe 내의 다양한 도메인에 있는 페이지에 대한 정보를 얻을 수 있는 방법이 없기 때문입니다. 다르게 생각해보면 처음에 iframe 내부 페이지 정보를 얻을 수 있었다면, 얻을 수 없었다면 폼을 제출했다는 뜻 아닐까요~
바이두가 입찰 사용자를 위해 제공하는 비즈니스 센터 방명록도 이 방법을 사용한다.
예:
test.html:
프로그램 코드
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head>
<body style="배경:#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 = 함수() {
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 = 거짓;
}
}
</script>
</html>
testaction.asp
프로그램 코드
<%
함수 Sleep(n) '단위 초 s
희미한 시작 시간
시작 시간 = 타이머
해야 할 일: 타이머까지 반복>n+StartTime
End Function
Sleep(5) '5초 지연
Response.Write Request.Form("dddd")
%>
단점:
이러한 단점은 여전히 명백하며 404, 403, 500 등의 오류인 경우 성공적인 제출로 오해받을 수 있습니다.
프로그램 코드
setTimeout(submitMonitor,100);
이 문제를 방지하려면 함수 앞에 클라이언트 양식 검사를 추가하세요.
물론 서버 측에 경고 스크립트를 출력하여 도메인 간 양식 제출 상태 판단을 구현할 수도 있습니다.