Мне удалось обработать всплывающее окно при нажатии ссылки в главном браузере Cefsharp с использованием интерфейса LifSpanHandler. Однако если щелкнуть другую всплывающую ссылку, ни одно из событий, таких как OnBeforePopup или OnAfterCreated, не запускается в интерфейсе LifSpanHandler. Это работает, если я закрываю всплывающее окно. Есть ли событие, которое я могу использовать, чтобы определить, когда новая ссылка загружается во всплывающее окно, когда всплывающее окно уже там? Я устанавливаю точку останова в любом из этих событий, но ни одно из них не срабатывает, если есть всплывающее окно.
Моя конечная цель - загрузить другой значок окна во всплывающее окно в зависимости от ссылки, по которой щелкают.
Это мой класс интерфейса LifeSpanHandler:
using CefSharp;
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows;
namespace LifeSpanHandlerExample
{
internal class LifeSpanHandler : ILifeSpanHandler
{
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool SetWindowText(IntPtr hwnd, String lpString);
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hwnd, int message, int wParam, IntPtr lParam);
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr SetFocus(IntPtr hWnd);
[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
private const int WM_SETICON = 0x80;
private const int ICON_SMALL = 0;
private const int ICON_BIG = 1;
public bool DoClose(IWebBrowser chromiumWebBrowser, IBrowser browser)
{
//
return false;
}
public void OnAfterCreated(IWebBrowser chromiumWebBrowser, IBrowser browser)
{
if (!browser.IsDisposed && browser.IsPopup)
{
System.IntPtr _handle = browser.GetHost().GetWindowHandle();
Bitmap bm = new Bitmap(Inc3DAppHelper.Properties.Resources.Incodema3D);
Icon icon = Icon.FromHandle(bm.GetHicon());
SendMessage(_handle, WM_SETICON, ICON_BIG, icon.Handle);
}
}
public void OnBeforeClose(IWebBrowser chromiumWebBrowser, IBrowser browser)
{
//
}
public bool OnBeforePopup(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures, IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
{
//Default Behavior
newBrowser = null;
return false; //return true to cancel popup creation
}
}
}