gpt4 book ai didi

c# - WebBrowser 控件无法触发事件处理程序

转载 作者:太空狗 更新时间:2023-10-29 20:38:54 26 4
gpt4 key购买 nike

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

这是应该发生的事情:

  1. native Windows Phone 8.1 Silverlight 应用实例化一个 WebBrowser 并为其提供一个 url 以加载身份验证网页。
  2. WebBrowser 控件加载 url 并呈现页面。
  3. 用户输入凭据并点击提交按钮以将信息发布到身份验证服务。
  4. Auth 服务验证凭据并以 302(重定向)响应。
  5. WebBrowser 控件跟随重定向。
  6. NavigationComplete 事件处理程序附加到控件。当它找到指示重定向成功的 url 模式时,它会执行一个附加方法。
  7. 附加方法从重定向 url 查询参数中提取 openid token 。
  8. 用户已通过身份验证并感到满意。

实际发生了什么:

用户在第 3 步提交其凭据后,WebBrowser 呈现空白页面并且不会触发任何 事件处理程序。该代码正在监听 WebBrowser 控件提供的每个导航事件处理程序。

我尝试过的:

  • 使用测试 heroku 服务器尽可能地重新创建场景。 WebBrowser 进入一个虚拟的凭据输入页面,其中有一个 POST 提交按钮,再次点击 heroku; heroku 响应 302 和真正的重定向 url。 WebBrowser 工作正常 O_o
  • WebBrowser 添加了 onTap 事件,用于检查当前 url/导航到另一个页面以查看控件是否在出现空白页面错误后以某种方式被破坏。 WebBrowser 正确响应。
  • 确保在控件上启用了 Javascript。
  • 使用与 Windows 8 平板电脑应用程序完全相同的服务器端基础架构,该应用程序共享 90% 的相同代码,但带有 WebView 控件。 WebView 工作正常。

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

最佳答案

戴夫,

WebBrowser 控件被设计为直接在 UI 线程中工作,根据您上面所说的,您可能在非 UI 线程中运行它,这种情况应该是……预期的意外行为。

如果是这种情况,您可能会尝试将线程转换为单线程单元 (STA) 线程,因为 apatment 模型更适合 COM 组件(例如 ActiveX 组件,WebBrowser 属于该类)并且您可以按如下方式进行:

yourThread.SetApartmentState(ApartmentState.STA);

关于STA线程的更多信息,请引用this page .

由于 WebBrowser 控件是一个 AciveX 组件,this page 的内容也是相关的,指向同一个问题。

希望对您有所帮助。 ;)

关于c# - WebBrowser 控件无法触发事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33537136/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com