【问题标题】:Chromium webBrowser navigation methodsChromium webBrowser 导航方法
【发布时间】:2016-06-06 14:46:57
【问题描述】:

我已经使用 CefSharp 库将 Chromium WebBrowser 添加到我的 C# 应用程序中,现在想要向“后退”按钮添加功能,以便用户导航到上一页。

据我了解,这将通过以下行来完成:

browser.WebBrowser.Back();

但是,如果我只是在按下“返回”按钮时调用的方法中写下这一行,则会引发异常,并且我的应用程序会中断。

异常说:

异常未处理

CefSharp.dll 中出现“System.Exception”类型的未处理异常

附加信息:lBrowser 实例为空。浏览器可能尚未完成初始化或正在处理中。

为什么我会收到此异常? 如果我将光标悬停在发生异常的行上,则会弹出一条消息:

(扩展) void lWebBrowser.Back()

返回导航,调用此方法前必须检查 lWebBrowser.CanGoBack。

但是,如果我随后将这一行移到 if 语句中,该语句首先检查 lWebBrowser.CanGoBack 的值,即

if(browser.WebBrowser.CanGoBack){
    browser.WebBrowser.Back();
}

然后虽然我的应用程序将运行,CanGoBack 总是看起来是假的——每当我按下“返回”按钮时,我的控制台中显示的调试表明它是假的......但如果尝试分配它true 的值在任何地方(即当用户导航到另一个页面时 - 所以有一个页面可以返回),例如:

browser.WebBrowser.CanGoBack = true;

我收到一个编译错误:

无法将属性或索引器“lWebBrowser.CanGoBack”分配给 -- 它是只读的

那么当用户点击“返回”按钮时,如何强制浏览器返回页面?

【问题讨论】:

  • Browser has likely not finished initializing 异常表示浏览器尚未完成初始化,在初始化之前您无法对其执行方法。 CanGoBack 不是你可以设置的属性,它是由浏览器自己计算出来的。 CanGoBack 应该在浏览器完成加载时设置。如果您需要澄清,请查看源代码。由于您没有说明您使用的是WinForms 还是WPF,因此无法为您提供详细的答案。

标签: c# dll navigation chromium cefsharp


【解决方案1】:

因此,问题似乎与我安装的 CefSharp 版本/我引用的版本有关 - 似乎我已经安​​装并引用了最新版本,但编译器似乎认为我引用的是旧版本,并且无法决定它认为应该使用哪一个。卸载 CefSharp、删除我对它所做的所有引用并重新安装它/重新实现我对它的使用后,我的应用程序现在可以正确使用浏览器,并且我能够显示我正在显示的网页并与之完全交互.

【讨论】:

  • 解决了太好了!您的回答与您提出的问题并不相符,卸载似乎与GoBackCanGoBack 无关
猜你喜欢
  • 2012-12-16
  • 2015-11-09
  • 2015-03-09
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 2014-07-26
  • 2018-02-04
  • 1970-01-01
相关资源
最近更新 更多