或者变通一点..如何知道某段脚本是否会最终调用form的submit方法(直接或间接)

解决方案 »

  1.   

    你使用 document.forms[i].attachEvent("onsubmit",yourhandle)
    那样子尝试一下,似乎在HTC中只有采用那样的方法拦截了
      

  2.   

    脚本调用submit是不会引发onsubmit事件的,所以钩住onsubmit也是白搭
      

  3.   

    5.0以下的我不是很清楚,刚才查了一下资料,IE5.5以上可以使用fireEvent来触发onsubmit事件,就可以可以要求在form.submit()之前调用,这个可能是一个变通的方法,在你的客户代码中如果是直接submit的,就添加fireEvent("onsubmit"),我还没有去测试过,只是觉得这个应该是一个替代的解决方案
      

  4.   

    <PUBLIC:COMPONENT>
    <ATTACH EVENT="onsubmit"  HANDLER="customFunc" />
    <SCRIPT LANGUAGE="JavaScript">
    function customFunc(){
        //code here
    }
    </SCRIPT>
    </PUBLIC:COMPONENT>
      

  5.   

    Mongris(Mongris) 老兄这样写,在使用代码submit的时候,是没有办法调用onsubmit的
      

  6.   

    不好意思
    看错了楼主的题意我对此问题的做法是在FORM.htc中创建一个新的function来封装customfunc和submit
      

  7.   

    to liuruhong(蓝色街灯) 
    就是为了减少htc的外部依赖,在不改动原有文档的函数的基础上在submit事件链中增加相应的处理.类似于win32 api中的SetWindowHook,
    对于不合法的提交动作进行拦截.如果一个软件中上千个页面提交都去改动函数的话htc就失去意义了.做这个的目的是为了将前一段时间写的一个htc表单验证组件进一步完善,实现对用户完全透明性.按照指定的验证接口结合正则表达式,进行验证并在相应的上下文中进行适当的处理.
      

  8.   

    类似SetWindowHook在web编程中估计有点够呛,不过倒是可以探讨探讨实现的技巧
      

  9.   

    我想到的一个变通办法就是检测对submit方法的调用,并在其调用前插入自己的处理.
    只是不知道window有没有类似window.functions之类的成员可以检索页面中定义的所有function然后用正则表达式对function body进行查找.
      

  10.   

    我个人认为,最简单的方法就是查找。替换找到所有使用 obj.submit()
    替换成 自己编写的函数,最重要的是可以加上fireEvent()我是说IE5.5+其他偶想不出好办法了阿
      

  11.   

    to liuruhong(蓝色街灯)
    如果有链入的外部函数呢?
      

  12.   

    document.scripts可以全部获得,似乎只有如此了,真正意义的hook应该不行,除非你使用ActiveX
      

  13.   

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

  14.   

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

  15.   

    老兄,如果那样,偶就想不出特别好的方法了另外对于源文件,还有一个方法就是search --replace,嘿嘿
      

  16.   

    当然,我可以利用download behavior实现将src指向的文件Z抓回来,但是对那些运行时创建的引用和运行时创建的函数仍然是无能为力..
      

  17.   

    可惜dom的方法不可以重写偶无法帮忙了,偶认为最可行的方法就是使用查找替换原来的submit,然后都加入自己的回调函数
      

  18.   

    试一下方法,成功的话告诉我:在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>