CefSharp 39.0.2
を使用してタブ付きWebブラウザを作成しています。現在、ユーザーがWebサイトのリンクをクリックすると、元のUIがない新しいウィンドウが開きます。たとえば、Googleニュースの記事のリンクをクリックすると、新しいウィンドウで開きますが、私が作成したブラウジングコントロールはありません。 Cef.WinForms.Example
プログラムも調べましたが、まったく同じことをします。
これを別の方法で処理することは可能ですか?リンクを新しいタブで開くか、新しいウィンドウで開きます(すべてのコントロールがそこにあります)。私はGitHubの問題を調べていましたが、このようなものは見つかりませんでした(これは他の人もやりたいことだと思うので、十分に調べていなかったのかもしれません...)。ブラウザコントロールのすべてのevents
を調べましたが、処理しているように見えるものは見つかりませんでした。
ChromiumWebBrowser
にはLifeSpanHandler
プロパティがあります。 Cefsharpでポップアップウィンドウを手動で制御するには、ILifeSpanHandle
インターフェイスを実装する独自のライフスパンハンドラオブジェクトを実装する必要があります。
ブラウザが新しいウィンドウを開きたいときはいつでも、ライフスパンハンドラのOnBeforePopup
関数を呼び出します。ここで、目的の動作を実装できます。 false
を返すと、ブラウザは新しいウィンドウをポップアップします。 true
を返すと、ブラウザはポップアップアクションを無視しますが、新しいウィンドウや新しいタブなどを手動で作成できます...
これは、カスタムライフスパンハンドラーの非常に単純な例です。ポップアップリクエストでは、PopupRequestというイベントを発生させます。このようなイベントをサブスクライブして、新しいウィンドウ/タブを手動で作成できます。次に、ChromiumWebBrowser
に独自の新しいウィンドウを作成しないように指示するtrueを返します。ただし、別のChromiumWebBrowser
を使用して新しいウィンドウを作成することを自分で実装する必要があります。
public class SampleLifeSpanHandler: ILifeSpanHandler
{
public event Action<string> PopupRequest;
public bool OnBeforePopup(IWebBrowser browser, string sourceUrl, string targetUrl, ref int x, ref int y, ref int width,
ref int height)
{
if (PopupRequest != null)
PopupRequest(targetUrl);
return true;
}
public void OnBeforeClose(IWebBrowser browser)
{
}
}