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

拐个弯想,如果开始可以获得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);
        }
}
}

时间: 2024-10-28 07:16:46

跨域表单提交状态的变相判断代码_javascript技巧的相关文章

js跨域问题浅析及解决方法优缺点对比_javascript技巧

什么是跨域? 概念:只要协议.域名.端口有任何一个不同,都被当作是不同的域. 复制代码 代码如下: URL                      说明       是否允许通信 http://www.a.com/a.js http://www.a.com/b.js 同一域名下 允许 http://www.a.com/lab/a.js http://www.a.com/script/b.js 同一域名下不同文件夹 允许 http://www.a.com:8000/a.js http://www

js实现跨域的4种实用方法原理分析_javascript技巧

什么是js跨域呐? js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被当作是不同的域. 要解决跨域的问题,我们可以使用以下几种方法: 一.通过jsonp跨域 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的.但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的. 比如,有个a.html页面,

Javascript的表单与验证-非空验证_javascript技巧

推荐阅读:Javascript的表单验证长度 Javascript的表单验证-提交表单 Javascript的表单验证-初识正则表达式 Javascript的表单验证-揭开正则表达式的面纱  JavaScript 可用来在数据被送往服务器前对 HTML 表单中的这些输入数据进行验证. 表单提交前要检查数据的合法性 在要对表单里的数据进行验证的时候,可以利用getElementById()来访问网页上任何一个元素 每个表单域都有一个form对象,可被传给任何验证表单数据的函数 <input id=

详解JavaScript表单验证(E-mail 验证)_javascript技巧

本文为大家分享了JavaScript表单验证,被 JavaScript 验证的这些典型的表单数据有: 用户是否已填写表单中的必填项目? 用户输入的邮件地址是否合法? 用户是否已输入合法的日期? 用户是否在数据域 (numeric field) 中输入了文本? 必填(或必选)项目 下面的函数用来检查用户是否已填写表单中的必填(或必选)项目.假如必填或必选项为空,那么警告框会弹出,并且函数的返回值为 false,否则函数的返回值则为 true(意味着数据没有问题): function validat

对于Form表单reset方法的新认识_javascript技巧

HTML中Form表单的reset方法被用来清空用户所输入的内容,以前一直误以为其是单纯的将input等输入项中的值清空. 但实际上不是这样的,reset方法的本质是将input等输入项中的内容还原为属性value中的值,而不是""空值. w3c上是这样说的: 在 HTML 表单中 <input type="reset"> 标签每出现一次,一个 Reset 对象就会被创建. 当重置按钮被点击,包含它的表单中所有输入元素的值都重置为它们的默认值.默认值由

js函数名与form表单元素同名冲突的问题_javascript技巧

今天在导出Excel的时候用了Form 表单的input hidden 来区分导出和搜索.开始的时候js中的onClick事件的函数名 和 hidden 中的 id 命名一样.结果导致报错:调用函数的那一行对象不支持此属性. 找了很长时间都找不出原因,开始的时候一直以为是写错了某个字母,才发现js函数根本没有执行.后来没有办法直接调用了别的函数,发现就有用了,认为是函数名的原因,改了函数名才有用了.然后再将input中的id改成很函数名一样,又出现报错了.在没有下例验证之前,还一直以为是Thin

使用postMesssage()实现跨域iframe页面间的信息传递方法_javascript技巧

由于web同源策略的限制,当页面使用跨域iframe链接时,主页面与子页面是无法交互的,这对页面间的信息传递造成了不小的麻烦,经过一系列的尝试,最后我发现有以下方法可以实现: 1. 子页面url传参 简单说来就是把所有需要传递的参数加到与主页面同源的url上,将子页面重定向到该url,然后主页面通过iframe的src获取这些参数 过程非常复杂,不建议使用这种方法 2. postMessage() postMesssage()是HTML5提供的一个基于事件的消息传输API,可以实现跨文本档.多窗

js 提交form表单和设置form表单请求路径的实现方法_javascript技巧

如下所示: form表单ID:postform 设置表单请求url document.postform.action = "SaveReturnInfo"; 提交form表单 document.getElementById("postform").submit(); 以上就是小编为大家带来的js 提交form表单和设置form表单请求路径的实现方法全部内容了,希望大家多多支持~ 以上是小编为您精心准备的的内容,在的博客.问答.公众号.人物.课程等栏目也有的相关内容,

js实现不提交表单获取单选按钮值的方法_javascript技巧

本文实例讲述了js实现不提交表单获取单选按钮值的方法.分享给大家供大家参考.具体如下: 这是JS实现的特效,不提交表单获取相关的控件值.如本例所示,不提交表单即可获取单选按钮的值. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-alert-show-table-value-codes/ 具体代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"