• 全部
  • 问答

如何拦截表单的脚本submit动作======================>用于htc中

yonghengdizhen 2003-07-27 05:55:16
RT
...全文
142 点赞 收藏 22
写回复
22 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wsj 2003-08-05
试一下方法,成功的话告诉我:

在htc初始化时,替换form的action到一个函数,并记住旧action
<script>
function doit(ofrm)
{
ofrm = form1;//You should find someway out here to got FORM instance
ofrm.fireEvent("onsubmit");
if(doYourHTCcheck(ofrm))
event.returnValue = false;
else
{
ofrm.action = oldAction
ofrm.submit();
}
}

</script>
<form id=form1 action="javascript:doit(this)" onsubmit="alert(1);status=1;return true;">
<input></input>
</form>

<script>
form1.submit();
//form1.fireEvent("onsubmit");
</script>
回复
jzywh 2003-07-30
不用拦截

不用 type=submit
回复
yonghengdizhen 2003-07-30
document.scripts检索的只是一个script标记集合,它无法检索其定义的链入内容,包括函数定义..

如果能检索它的内容,要实现hook就容易了,我可以篡改函数的实现.让它路由至我的函数中
回复
yonghengdizhen 2003-07-30
document.scripts检索的只是一个script标记集合,它无法检索其定义的链入内容,包括函数定义..

如果能检索它的内容,要实现hook就容易了,我可以篡改函数的实现.让它路由至我的函数中
回复
liuruhong 2003-07-30
document.scripts可以全部获得,似乎只有如此了,真正意义的hook应该不行,除非你使用ActiveX
回复
yonghengdizhen 2003-07-30
to liuruhong(蓝色街灯)
如果有链入的外部函数呢?
回复
liuruhong 2003-07-30
我个人认为,最简单的方法就是查找。。。。。。。替换

找到所有使用 obj.submit()
替换成 自己编写的函数,最重要的是可以加上fireEvent()我是说IE5.5+

其他偶想不出好办法了阿
回复
liuruhong 2003-07-30
可惜dom的方法不可以重写

偶无法帮忙了,偶认为最可行的方法就是使用查找替换原来的submit,然后都加入自己的回调函数
回复
yonghengdizhen 2003-07-30
当然,我可以利用download behavior实现将src指向的文件Z抓回来,但是对那些运行时创建的引用和运行时创建的函数仍然是无能为力..

回复
liuruhong 2003-07-30
老兄,如果那样,偶就想不出特别好的方法了

另外对于源文件,还有一个方法就是search --replace,嘿嘿
回复
yonghengdizhen 2003-07-29
是的..
回复
jsidiot 2003-07-29
拦截?
回复
yonghengdizhen 2003-07-29
我想到的一个变通办法就是检测对submit方法的调用,并在其调用前插入自己的处理.
只是不知道window有没有类似window.functions之类的成员可以检索页面中定义的所有function然后用正则表达式对function body进行查找.
回复
liuruhong 2003-07-29
类似SetWindowHook在web编程中估计有点够呛,不过倒是可以探讨探讨实现的技巧
回复
yonghengdizhen 2003-07-29
to liuruhong(蓝色街灯)
就是为了减少htc的外部依赖,在不改动原有文档的函数的基础上在submit事件链中增加相应的处理.类似于win32 api中的SetWindowHook,
对于不合法的提交动作进行拦截.如果一个软件中上千个页面提交都去改动函数的话htc就失去意义了.

做这个的目的是为了将前一段时间写的一个htc表单验证组件进一步完善,实现对用户完全透明性.按照指定的验证接口结合正则表达式,进行验证并在相应的上下文中进行适当的处理.
回复
Mongris 2003-07-29
不好意思
看错了楼主的题意

我对此问题的做法是在FORM.htc中创建一个新的function来封装customfunc和submit
回复
liuruhong 2003-07-29
Mongris(Mongris) 老兄这样写,在使用代码submit的时候,是没有办法调用onsubmit的
回复
Mongris 2003-07-29
<PUBLIC:COMPONENT>
<ATTACH EVENT="onsubmit" HANDLER="customFunc" />
<SCRIPT LANGUAGE="JavaScript">
function customFunc(){
//code here
}
</SCRIPT>
</PUBLIC:COMPONENT>
回复
liuruhong 2003-07-29
5.0以下的我不是很清楚,刚才查了一下资料,IE5.5以上可以使用fireEvent来触发onsubmit事件,就可以可以要求在form.submit()之前调用,这个可能是一个变通的方法,在你的客户代码中如果是直接submit的,就添加fireEvent("onsubmit"),我还没有去测试过,只是觉得这个应该是一个替代的解决方案
回复
yonghengdizhen 2003-07-28
脚本调用submit是不会引发onsubmit事件的,所以钩住onsubmit也是白搭
回复
发帖
JavaScript
创建于2007-09-28

8.5w+

社区成员

Web 开发 JavaScript
申请成为版主
帖子事件
创建了帖子
2003-07-27 05:55
社区公告
暂无公告