如何在webBrowser中实现window.external的隐藏?
使用VS 2005 VB.NET 开发webBrowser控件,并将其事件进行了扩展.
我想将window.external隐身.在HTML加载前能通过execScript来实现对window.external的定义.实现的效果类似在HTML加载的首行加载个
<script type="text/javascript" >
EWB=window.external;
</script>
这样的效果,可以通过webBrowser控件执行execScript的话则可以隐藏这个定义,这样在其它的javascript里面直接就可以引用这个EWB对象.
具体代码execScript执行的语句为 if(typeof(EWB)=='undefined'){EWB=window.external;}
网上execScript的执行基本都放在DocumentComplete事件中.经过测试确实可以实现.
但是出现一个新的问题:在frame下面的页面的DocumentComplete事件中执行则会失败.在frame中的页面执行则调用javascript脚本中会出现undefined.的情况.
但是我在vb.net程序中连续执行.
ExecuteScript("if(typeof(EWB)=='undefined'){EWB=window.external;}")
ExecuteScript("alert(typeof(EWB))")
则会提示EWB的类型为object即被定义了.但是到HTML中调用则又为undefined了.现象比较诡异.
而最新的需求需要在body的oninit事件中调用这个EWB对象,可是EWB的声明在DocumentComplete,先后顺序有冲突.目前经过对webBrowser的事件的拓展增加了BeforeNavigate2和DownloadBegin事件,但是execScript不能在BeforeNavigate2这个事件里面加载.因为这是引用的document对象还是nothing的.而DownloadBegin事件中加入上述语句一样的结果.
当然这个办法可以通过包含一个.js文件定义,像我这样做貌似有点故弄玄虚.但是俺就想搞一个这样的效果.我想理论上这样的效果应该能实现.
哪位能帮忙看看应该在哪个事件中(DownloadBegin)执行我这个脚本,或者有什么其它的办法能定义下这个EWB对象(最终不出现在HTML源码中).
最后总结下问题:
1.execScript为什么到了frame下面的页面DocumentComplete事件中加载会不生效.
2.最早可以在哪个事件中使用execScript来实现对EWB=window.external的定义.
[解决办法]
webbrowser做不了,需要用代理服务器修改网页数据。