WEB开发网
开发学院网页设计JavaScript Javascript 跨域表单提交状态的变相判断 阅读

Javascript 跨域表单提交状态的变相判断

 2009-05-06 20:11:39 来源:WEB开发网   
核心提示:通过表单在iframe内向一个跨域的url提交的时候,如何判断提交成功了呢?这个,Javascript 跨域表单提交状态的变相判断,基本上,很难,来尽量避免此问题,当然,因为浏览器安全沙箱的限制,我们没有办法通过获得iframe内部不同域页面的信息

通过表单在iframe内向一个跨域的url提交的时候,如何判断提交成功了呢?
这个,基本上,很难,因为浏览器安全沙箱的限制,我们没有办法通过获得iframe内部不同域页面的信息。换种思维,如果开始可以获得iframe内部页面信息,那么不能获得的时候,不就说明表单已经提交了么~
百度提供给竞价用户使用的商务中心留言本就是采用此方法。

示例:

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>
<script>
document.testform.onsubmit = function () {
   document.testform.submitbtn.disabled = true;
   submitMonitor();

}
function submitMonitor () {
   try{
     var hash = document.getElementById('testiframe').contentWindow.location.hash;
     setTimeout(submitMonitor,100);
   } catch (e) {
     document.getElementById('testiframe').src = "about:blank";
     document.testform.submitbtn.disabled = false;
   }
}
</script>
</html>


testaction.asp

 程序代码
<%
Function Sleep(n) '单位秒s
Dim StartTime
StartTime = Timer
Do : Loop Until Timer>n+StartTime
End Function

Sleep(5) '延时5秒

Response.Write Request.Form("dddd")
%>


弊端:
这个弊端还很明显,如果是404,403,500等错误,也会误认为是成功提交,不过可以在
 程序代码
setTimeout(submitMonitor,100);
函数前增加客户端表单检查,来尽量避免此问题。

当然,跨域表单提交状态判断也可以用服务器端输出alert脚本来实现。

Tags:Javascript 表单 提交

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接