我想自己实现 IActiveScript IActiveScriptSite等接口,然后在自己的程序里,基于CHtmlView的程序里,把默认的脚本引擎接口等替换成我的,以此来控制脚本的执行等,该如何实现?

解决方案 »

  1.   

    你应该是想让CHtmlView打开你本地的网页吧, 然后再这个网页里面执行你自己的js脚本?
      

  2.   

    这个技术是一层很高大的纸幕,虽然很薄,但就是看不见另一面。但是纸毕竟是薄的,只要选择了恰当的技术,一根针就能捅破它。当年我用V8改造JS引擎的时候,就成功地让IE用了我的引擎而不是系统自带的JSCRIPT。抱歉的是,这个技术我没有公开,只私下送给了几个圈内的朋友。
      

  3.   

    网上的一原话"IE用的是微软的脚本引擎规范,所以我把V8改造成符合微软规范的版本,然后在运行时替换jscript引擎。测试结果:通过。总体运行性能:不如原版,尤其在DOM访问速度上。"
      

  4.   

    我接管脚本运行的出发点是想控制一些JS函数的执行,例如blur函数,它会使窗体Z-ORDER位置发生变化,还有网页关闭事件等,都想在JS接管的时候直接拦截和处理,因此想从IActiveScript等接口处理
      

  5.   


    你这个需求根本不需要用这种接管整个脚本引擎的方式解决,直接用JS代码就能搞定。自己保存原始的blur方法;实现一个替代的blur方法替换掉原始方法。e.oldBlur = e.blur;
    e.blur = function(){
      // do something or nothing, or call original method, such as: e.oldBlur();
    };
    别告诉我这个方法太复杂。
      

  6.   

    替换的方法有时候会不行,我目前就是采用这种方法,我再OnNavigateComplete和OnDocumentComplete里都加了替换函数,大部分时候是可以的,但是有时候也会不行,因为有时候会没等替换呢就已经执行完了,因此我考虑如何在更早的时机替换或者接管JS脚本对blur的执行