WebBrowser控件无法触发事件处理程序
本文关键字:事件处理 程序 控件 WebBrowser | 更新日期: 2023-09-27 18:20:34
在特定情况下,WebBrowser
控件无法触发NavigationComplete
或NavigationFailed
事件处理程序。
以下是应该发生的事情:
- 本机Windows Phone 8.1 Silverlight应用程序实例化
WebBrowser
,并为其提供加载身份验证网页的url WebBrowser
控件加载url并呈现页面- 用户输入凭据并点击提交按钮将信息POST到身份验证服务
- 身份验证服务验证证书并用302(重定向)进行响应
WebBrowser
控件跟随重定向NavigationComplete
事件处理程序附加到控件。当它找到一个表示重定向成功的url模式时,它会执行一个额外的方法- 附加的方法从重定向url查询参数中提取一个openid令牌
- 用户已通过身份验证并感到满意
实际情况:
用户在步骤#3提交凭据后,WebBrowser
将呈现一个空白的白色页面,并且不会触发任何事件处理程序。代码正在侦听WebBrowser
控件提供的每个导航事件处理程序。
我尝试过的:
- 用测试heroku服务器尽可能地重新创建了这个场景。WebBrowser转到一个伪凭证输入页面,其中POST提交按钮再次点击heroku;heroku用302和真实的重定向url进行响应。
WebBrowser
运行良好O_O - 向
WebBrowser
添加了onTap
事件,该事件检查当前url/导航到另一个页面,以查看空白页面错误后控件是否以某种方式被破坏。WebBrowser
响应正确 - 确保在控件上启用了Javascript
- 使用与Windows 8平板电脑应用程序完全相同的服务器端基础设施,该应用程序共享90%的相同代码,但具有
WebView
控件。WebView
运行良好
有什么建议吗?有人经历过这种控制行为吗?有人知道有一个图书馆可以解决这个问题吗(商业或开源)。适用于Windows的Android桥接器还是适用于Windows系统的iOS桥接器支持Windows phone 8?
Dave,
WebBrowser控件被设计为直接在UI线程中工作,根据您上面所说的,您可能在非UI线程中运行它,在这种情况下,应该会出现意外行为。
如果是这种情况,您可能会尝试将线程转换为单线程单元(STA)线程,因为单元模型对COM组件(如ActiveX组件,WebBrowser属于该类)来说更为合适,您可以按如下方式执行:
yourThread.SetApartmentState(ApartmentState.STA);
有关STA线程的更多信息,请参阅本页。
由于WebBrowser控件是AciveX组件,因此此页面的内容也具有相关性,并指向相同的问题。
希望能有所帮助。)