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

王朝学院·作者佚名  2009-05-07  
宽屏版  字体: 小 | 中 | 大 | 超大  

通过表单在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脚本来实现。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有