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


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 相关文章推荐
IE7提供XMLHttpRequest对象为兼容
Mar 08 Javascript
javascript 必知必会之closure
Sep 21 Javascript
屏蔽F1~F12的快捷键的js函数
May 06 Javascript
jQuery插件实现屏蔽单个元素使用户无法点击
Apr 12 Javascript
将Datatable转化成json发送前台实现思路
Sep 06 Javascript
再谈JavaScript异步编程
Jan 27 Javascript
jQuery Ajax 实现在html页面实时显示用户登录状态
Dec 30 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
Aug 31 Javascript
从0到1搭建element后台框架优化篇(打包优化)
May 12 Javascript
JS中间件设计模式的深入探讨与实例分析
Apr 11 Javascript
vue实现给div绑定keyup的enter事件
Jul 31 Javascript
给原生html中添加水印遮罩层的实现示例
Apr 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
简单易用的计数器(数据库)
2006/10/09 PHP
php 无限极分类
2008/03/27 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
2010/05/04 PHP
解析PHP 5.5 新特性
2013/07/02 PHP
JavaScript高级程序设计 阅读笔记(十七) js事件
2012/08/14 Javascript
js弹出框轻量级插件jquery.boxy使用介绍
2013/01/15 Javascript
jQuery中get和post方法传值测试及注意事项
2014/08/08 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
js判断空对象的实例(超简单)
2016/07/26 Javascript
JS实现列表页面隔行变色效果
2017/03/25 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
vue中Npm run build 根据环境传递参数方法来打包不同域名
2018/03/29 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
vue实现移动端悬浮窗效果
2018/12/01 Javascript
js消除图片小游戏代码
2019/12/11 Javascript
使用Typescript和ES模块发布Node模块的方法
2020/05/25 Javascript
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
微信跳一跳python辅助软件思路及图像识别源码解析
2018/01/04 Python
python正则中最短匹配实现代码
2018/01/16 Python
Python即时网络爬虫项目启动说明详解
2018/02/23 Python
在Python中使用defaultdict初始化字典以及应用方法
2018/10/31 Python
Python 单元测试(unittest)的使用小结
2018/11/14 Python
python采集百度搜索结果带有特定URL的链接代码实例
2019/08/30 Python
有关Tensorflow梯度下降常用的优化方法分享
2020/02/04 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
2020/04/09 Python
python中upper是做什么用的
2020/07/20 Python
详解CSS透明opacity和IE各版本透明度滤镜filter的最准确用法
2016/12/20 HTML / CSS
Hudson Jeans官网:高级精制牛仔裤
2018/11/28 全球购物
特教教师先进事迹
2014/05/21 职场文书
解除劳动合同证明书
2014/09/26 职场文书
介绍信范文
2015/01/31 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
微信小程序APP的生命周期及页面的生命周期
2022/04/19 Javascript
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
2022/08/14 Servers