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


Posted in Javascript onNovember 12, 2009

拐个弯想,如果开始可以获得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.php" 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.php
<?php 
sleep(5); 
echo $_POST['dddd']; 
?>

弊端:
这个弊端还很明显,如果是404,403,500等错误,也会误认为是成功提交。
所以,请注意:此方法属研究,开拓思维用。
这段是百度的判断代码
var sfMessTimes; 
function sfMessSubmitMonitor () { 
try{ 
var hash = sf_mess_lib.getElement(SF_MESS_FRAME_ID).contentWindow.location.hash; 
        sfMessTimes ++; 
        if (sfMessTimes > 50) { 
            alert(sf_mess_msg.fail); 
            sf_mess_lib.getElement(SF_MESS_SUBMIT_ID).disabled = false; 
            for (var i = 0, l = sf_mess_cols.length; i < l; i++) { 
                document.getElementById(SF_MESS_PREFIX + sf_mess_cols[i].idname).disabled = false; 
            } 
        } else { 
            setTimeout(sfMessSubmitMonitor,100); 
        } 
} catch (e) { 
sf_mess_lib.getElement(SF_MESS_FRAME_ID).src = "about:blank"; 
        alert(sf_mess_msg.success); 
sf_mess_lib.getElement(SF_MESS_SUBMIT_ID).disabled = false; 
        for (var i = 0, l = sf_mess_cols.length; i < l; i++) { 
            var inputCfg = sf_mess_cols[i]; 
            var inputEl = document.getElementById(SF_MESS_PREFIX + inputCfg.idname); 
            inputEl.disabled = false; 
            inputEl.value = filtInnertip(inputCfg.innertip); 
        } 
} 
}
Javascript 相关文章推荐
提高代码性能技巧谈—以创建千行表格为例
Jul 01 Javascript
基于jquery的图片的切换(以数字的形式)
Feb 14 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
Apr 10 Javascript
加载列表时jquery获取ul中第一个li的属性
Nov 02 Javascript
JavaScript数据类型详解
Apr 01 Javascript
Bootstrap carousel轮转图的使用实例详解
May 17 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
Oct 13 Javascript
js原生之焦点图转换加定时器实例
Dec 12 Javascript
深究AngularJS中ng-drag、ng-drop的用法
Jun 12 Javascript
Vue项目实现换肤功能的一种方案分析
Aug 28 Javascript
通过layer实现可输入的模态框的例子
Sep 27 Javascript
javascript实现滚轮轮播图片
Dec 13 Javascript
JS 中document.URL 和 windows.location.href 的区别
Nov 11 #Javascript
ASP中进行HTML数据及JS数据编码函数
Nov 11 #Javascript
javascript 日期常用的方法
Nov 11 #Javascript
Jquery在IE7下无法使用 $.ajax解决方法
Nov 11 #Javascript
jQuery 白痴级入门教程
Nov 11 #Javascript
Javascript 解疑
Nov 11 #Javascript
不一样的文字闪烁 轮番闪烁
Nov 11 #Javascript
You might like
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
基于php编程规范(详解)
2017/08/17 PHP
PHP中常见的密码处理方式和建议总结
2018/10/14 PHP
jQuery :nth-child前有无空格的区别分析
2011/07/11 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
2014/12/12 Javascript
jQuery AjaxUpload 上传图片代码
2016/02/02 Javascript
BootStrap和jQuery相结合实现可编辑表格
2016/04/21 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
AngularJS利用Controller完成URL跳转
2016/08/09 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
js 奇葩技巧之隐藏代码
2017/08/11 Javascript
教你用Cordova打包Vue项目的方法
2017/10/17 Javascript
js 取消页面可以选中文字的功能方法
2018/01/02 Javascript
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
vue element upload实现图片本地预览
2019/08/20 Javascript
解决vue的过渡动画无法正常实现问题
2019/10/31 Javascript
JS实现音乐导航特效
2020/01/06 Javascript
梳理一下vue中的生命周期
2020/12/30 Vue.js
Anaconda2下实现Python2.7和Python3.5的共存方法
2018/06/11 Python
Python获取Redis所有Key以及内容的方法
2019/02/19 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
为什么说python适合写爬虫
2020/06/11 Python
HTML5中的Scoped属性使用实例
2014/04/23 HTML / CSS
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
加拿大在线眼镜零售商:SmartBuyGlasses加拿大
2019/05/25 全球购物
军训自我鉴定200字
2014/02/13 职场文书
优秀班组长事迹
2014/05/31 职场文书
新农村建设标语
2014/06/24 职场文书
2015年教师业务工作总结
2015/05/26 职场文书
高三教师工作总结2015
2015/07/21 职场文书
java设计模式--建造者模式详解
2021/07/21 Java/Android
默认网关不可用修复后过一会又不好使了解决方法
2022/04/08 数码科技
zabbix配置nginx监控的实现
2022/05/25 Servers