2015-11-05 84 views
7

在特定情况下,WebBrowser控件无法触发NavigationCompleteNavigationFailed事件处理程序。WebBrowser控件无法触发事件处理程序

这里会发生什么:

  1. 原生的Windows Phone 8.1的Silverlight应用程序实例化一个WebBrowser,并提供其URL来加载认证网页。
  2. WebBrowser控件加载url并呈现页面。
  3. 用户输入凭证并点击提交按钮以将信息发布到验证服务。
  4. 验证服务验证凭据并用302(重定向)进行响应。
  5. WebBrowser控制遵循重定向。
  6. A NavigationComplete事件处理程序附加到控件。当它找到一个表示重定向成功的url模式时,它会执行一个附加的方法。
  7. 附加方法从重定向url查询参数中抽取openid标记。
  8. 用户已通过身份验证并且很高兴。

实际发生的:用户在步骤#提交他们的凭据

后3 WebBrowser呈现一个空白页面,并不会触发任何事件处理程序。该代码正在监听由WebBrowser控件提供的每个导航事件处理程序。

我已经试过什么:

  • 与测试Heroku的服务器重建方案尽可能接近,我可以。 WebBrowser通过POST提交按钮进入虚拟凭证输入页面,该按钮再次击中heroku; heroku回应302和真正的重定向网址。 WebBrowser工作正常O_o
  • 添加onTap事件到WebBrowser检查当前的URL /导航到另一个页面,以查看控制是否在空白页错误后以某种方式损坏。 WebBrowser正确响应。
  • 确保在控件上启用了Javascript。
  • 使用与Windows 8平板电脑应用程序完全相同的服务器端基础结构,该应用程序共享90%的相同代码,但使用WebView控件。 WebView工作得很好。

有什么建议吗?有没有人经历过这样的控制?有谁知道可以解决这个问题的库(商业或开源)。 Android bridge for WindowsiOS bridge for Windows支持windows phone 8吗?

+0

难以帮助没有完整的repro示例。 –

+0

是的,我自己也有同样的问题。我只能用我们公司专有的Auth软件重现它 – davehenry

+0

正在重定向使用HTTPS的页面?如果有,证书是否有效?导航到托管浏览器控件上具有无效证书的页面时,有时会显示空白页面。 – Don

回答

1

戴夫,

WebBrowser控件设计直接在UI线程工作,并通过你上面说的,这是可能的,你可以在非UI线程来运行它,的情况下意外的行为应该......预期。

如果是这种情况,可以尝试将线程转换为单线程单元(STA)线程,因为apatment模型对于COM组件(例如类WebBrowser所属的ActiveX组件)来说已经足够了,你可以这样做:

yourThread.SetApartmentState(ApartmentState.STA); 

有关STA线程的更多信息,请参阅this page

由于WebBrowser控件是AciveX组件,因此this page的内容也具有相关性,并且指出同样的问题。

希望它有帮助。 ;)

+0

感谢您的回答!我会让你知道它是怎么回事:) – davehenry

相关问题