CefSharp.Winforms通过javascript关闭选项卡

时间:2015-09-15 10:29:15

标签: javascript chromium-embedded cefsharp

我在我的项目中使用了CefSharp.WinForms.ChromiumWebBrowser v41.0.1。有许多选项卡,每个选项卡都有一个chrome webbrowser。 我尝试通过javascript函数window.close()关闭其中一个选项卡。但它也关闭了所有标签和我的程序。主要原因是什么?有没有办法通过javascript关闭一个标签?

2 个答案:

答案 0 :(得分:1)

我相信你会发现CEF发送WM_CLOSE消息到顶级窗口,因为它是默认行为。

一种选择是升级到43.0.0-pre02版本,然后实施ILifeSpanHandler.DoClose,以便能够return true实现自己的自定义行为。 https://github.com/cefsharp/CefSharp/blob/cefsharp/43/CefSharp/ILifeSpanHandler.cs#L109

http://magpcss.org/ceforum/apidocs3/projects/%28default%29/CefLifeSpanHandler.html#DoClose%28CefRefPtr%3CCefBrowser%3E%29

您可以挂钩window.close,使用Javascript binding将其绑定到方法,然后自己处理关闭。

第三个选项是,以某种方式取消关闭表单,可能是FormClosing事件。

我没有明确地尝试过这些选项,知道哪个是最简单最干净的,我相信你能找到一些有用的东西。

答案 1 :(得分:0)

我已经实现了界面ILifeSpanHandler来创建一个新标签并通过javascript关闭它。但是,javascript打开的选项卡无法通过javascript关闭,它会导致关闭所有选项卡,程序并抛出空引用异常。我试图通过另一个线程创建一个新选项卡,并且发生了类似的错误,而主线程创建的选项卡通常可以通过window.close javscript关闭。 我意识到通过javascript创建一个新选项卡也可以在特定的线程中实现。因此,在另一个线程中创建的chrome webbrowser的javascript封闭将导致错误。 我怎么处理呢?