【发布时间】: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