WPF中Frame和WebBrowser关系
来源:互联网 发布:sql select if 编辑:程序博客网 时间:2024/06/05 02:23
转自:http://blog.sina.com.cn/s/blog_685790700100kaos.html
例如,使用Frame的Loaded或LoadCompleted方法时,会发现,网页还没加载完成这些事件就执行了。Loaded甚至是一开始就立刻执行了,LoadCompleted是在刚开始加载网页就执行的。
为什么会这样,似乎和Frame的这两个事件的描述不一样,但是在导航Page(Xaml)时就没问题。
详细阅读一下方法的说明和之前讲的Frame和WebBrowser的关系,其实可以找出答案。
还是以Loaded事件和LoadCompleted事件为例。
Loaded事件几乎在所有控件中都有,因此,Frame的Loaded方法和其他控件的Loaded是一样的,控件加载完成就触发。
LoadCompleted,这个对象是Frame内容加载完毕时触发的,看上去好像可以用这个方法来判断网页是否加载完毕,但是实际上依然不可以,为什么呢?如果Frame加载的是Page(Xaml),那么这个事件是管用的,但是,加载的是网页时,我们前面说过,Frame并没有直接加载网页,而是通过创建一个WebBrowser,然后这个WebBrowser再去加载网页,因此,Frame访问网页时,LoadCompleted是创建WebBrowser完成,而不是网页加载完成。
那么如何判断Frame中的网页是否加载完成呢?既然Frame并没自己加载网页,而是加载一个WebBrowser,然后由WebBrowser来加载网页,因此,我们要判断Frame中网页是否加载完成,其实依然是通过WebBrowser中的方法和事件来处理。这一点实际上又变回以前WinForm的操作方法了。
因此,我们在使用Frame来加载网页并与之互动时,需要记住,中间还有个WebBrowser,Frame只是创建一个WebBrowser,然后WebBrowser完成工作。Frame的Loaded只是自己完成时就触发,LoadCompleted事件是指WebBrowser实例化完成,网页加载完成是触发的WebBrowser的LoadCompleted。其他情况也遵循此原理。
还有一个地方要注意,在Frame触发LoadCompleted之前,Frame是还没有完成WebBrowser的创建的,因此,要想操作WebBrowser必须在LoadCompleted之后,否则会未实例化异常。
不要把WPF的Frame当做网页中的Frame来用了。
操作网页上的内容 :
WebBrowser wb = (WebBrowser)GeoServerFrm.Content;
mshtml.HTMLDocument document = (mshtml.HTMLDocument)wb.Document;
document.getElementById("test").setAttribute("value", "修改后内容", 0);
document.focus();
- WPF中Frame和WebBrowser关系
- WPF 与网页交互(Frame,WebBrowser)
- Webbrowser获取页面中所有frame
- WebKit中Page,Frame和Document的关系
- WebKit中Page,Frame和Document的关系
- WebKit中Page,Frame和Document的关系
- WPF中WebBrowser注入javascript脚本
- WPF中如何使webbrowser适应DPI
- WPF中使用webbrowser调用javascript代码
- WPF中WebBrowser的使用方法及分析
- frame 和 bounds 的关系
- WPF 中Frame + Page 的使用
- Delphi中WebBrowser用IHTMLDocument2自动填表中的Frame问题
- C# webbrowser Frame操作
- 视频编码中I-frame,P-frame和B-frame
- WPF和Silverlight的关系
- WPF和Silverlight的关系
- WPF和Silverlight的关系
- 病毒木马查杀实战第018篇:病毒特征码查杀之基本原理
- 静态二分查找
- Leetcode 343(Integer Break非动态规划求解)
- C++ STL stack queue 的使用函数
- 科大讯飞语音识别
- WPF中Frame和WebBrowser关系
- 应用eclipse自带工具进行代码调用函数分析
- AsyncTask和Handler对比
- J2SE再学习总结
- Android开发-API指南-<manifest>
- Python配置第三方库numpy、scipy、theano
- Android应用启动优化:一种DelayLoad的实现和原理(下篇)(转载)
- GCC 基本用法
- xcode下载iOS开发文档