【问题标题】:CefSharp.Winforms close tab by javascriptCefSharp.Winforms 通过 javascript 关闭选项卡
【发布时间】:2015-09-15 10:29:14
【问题描述】:

我在我的项目中使用 CefSharp.WinForms.ChromiumWebBrowser v41.0.1。有许多选项卡,每个选项卡都有一个铬网络浏览器。 我尝试通过 javascript 函数 window.close() 关闭这些选项卡之一。但它也会关闭所有选项卡和我的程序。主要原因是什么?有没有办法通过javascript只关闭一个标签?

【问题讨论】:

    标签: javascript chromium-embedded cefsharp


    【解决方案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 事件。

    我没有明确尝试过这些选项中的任何一个,要知道哪个是最简单和最干净的,我相信你可以找到一些可行的方法。

    【讨论】:

    • 谢谢。我已经升级到 43.0.0-pre02 版本。它工作正常
    【解决方案2】:

    我已经实现了接口 ILifeSpanHandler 来创建一个新选项卡并通过 javascript 关闭它。但是,javascript打开的标签页不能被javascript关闭,会导致关闭所有的标签页、程序并抛出空引用异常。我尝试通过另一个线程创建一个新的选项卡,并且出现了类似的错误,而主线程创建的选项卡可以通过window.close javscript正常关闭。 我意识到通过 javascript 创建一个新选项卡也可以在特定线程中实现。因此,在另一个线程中创建的 chromium webbrowser 被 javascript 关闭会导致错误。 我该如何处理?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      相关资源
      最近更新 更多