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


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 相关文章推荐
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
Jul 06 Javascript
用js闭包的方法实现多点标注冒泡示例
May 29 Javascript
js css 实现遮罩层覆盖其他页面元素附图
Sep 22 Javascript
相册展示PhotoSwipe.js插件实现
Aug 25 Javascript
ES6新特征数字、数组、字符串
Oct 01 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
Oct 04 Javascript
javascript中闭包概念与用法深入理解
Dec 15 Javascript
微信小程序中子页面向父页面传值实例详解
Mar 20 Javascript
vue小图标favicon不显示的解决方案
Sep 19 Javascript
微信小程序form表单组件示例代码
Jul 15 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
Aug 19 Javascript
使用RxJS更优雅地进行定时请求详析
Jun 02 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编写的导航条程序
2006/10/09 PHP
php下将多个数组合并成一个数组的方法与实例代码
2011/02/03 PHP
php CI框架插入一条或多条sql记录示例
2014/07/29 PHP
PHP JSON格式的中文显示问题解决方法
2015/04/09 PHP
php json_encode与json_decode详解及实例
2016/12/13 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
HR vs CL BO3 第一场 2.13
2021/03/10 DOTA
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
2008/03/22 Javascript
Javascript 圆角div的实现代码
2009/10/15 Javascript
JavaScript 判断指定字符串是否为有效数字
2010/05/11 Javascript
autoPlay 基于jquery的图片自动播放效果
2011/12/07 Javascript
js获取RadioButtonList的Value/Text及选中值等信息实现代码
2013/03/05 Javascript
关于jquery css的使用介绍
2013/04/18 Javascript
jquery分页对象使用示例
2014/04/01 Javascript
网页右下角弹出窗体实现代码
2014/06/05 Javascript
javascript初学者常用技巧
2014/09/02 Javascript
jQuery中:focus选择器用法实例
2014/12/30 Javascript
jquery实现简单Tab切换菜单效果
2020/07/17 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
Vue实现滑动拼图验证码功能
2019/09/15 Javascript
JS 设计模式之:工厂模式定义与实现方法浅析
2020/05/06 Javascript
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
python编程开发之类型转换convert实例分析
2015/11/13 Python
python之DataFrame实现excel合并单元格
2021/02/22 Python
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
2019/05/13 Python
Python协程 yield与协程greenlet简单用法示例
2019/11/22 Python
python tkinter 设置窗口大小不可缩放实例
2020/03/04 Python
Python实现在线批量美颜功能过程解析
2020/06/10 Python
建筑工程毕业生自我鉴定
2014/01/14 职场文书
2014年元旦促销活动方案
2014/02/22 职场文书
师德师风个人自我剖析材料
2014/09/27 职场文书
查摆问题整改措施范文
2014/10/11 职场文书
什么是动态刷新率DRR? Windows11动态刷新率功能介绍
2021/11/21 数码科技
Nginx的基本概念和原理
2022/03/21 Servers
如何打开Win11系统注册表编辑器?Win11注册表编辑器打开修复方法
2022/04/05 数码科技
vue实现列表垂直无缝滚动
2022/04/08 Vue.js