2015-09-15 2 views
0

Я использую CefSharp.WinForms.ChromiumWebBrowser v41.0.1 в моем проекте. Существует много вкладок, каждая вкладка имеет веб-браузер хрома. Я пытаюсь закрыть одну из этих вкладок функцией javascript window.close(). Но он также закрывает как все вкладки, так и мою программу. В чем главная причина? И есть ли способ закрыть только одну вкладку javascript?CefSharp.Winforms закрыть вкладку javascript

ответ

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.

Я не пробовал ни один из этих вариантов явно, чтобы узнать, что является самым простым и чистым, я уверен, что вы можете найти что-то, что работает.

+0

Спасибо. Я обновился до версии 43.0.0-pre02. Он отлично работает –

0

Я реализовал интерфейс ILifeSpanHandler, чтобы создать новую вкладку и закрыть ее с помощью javascript. Тем не менее, вкладки, открытые javascript, не могут быть закрыты javascript, это приводит к закрытию всех вкладок, программ и исключению исключений для исключений. Я попытался создать новую вкладку другим потоком, и подобные ошибки произошли, в то время как вкладки, созданные основным потоком, могут нормально закрываться окном .close javscript. Я понимаю, что создание новой вкладки javascript также будет реализовано в конкретном потоке. Таким образом, закрытие с помощью javascript хромового webbrowser, созданного в другом потоке, вызовет ошибки. Как я могу справиться с этим?

Смежные вопросы