2015-05-31 24 views
8

我正在使用CefSharp 39.0.2創建標籤式Web瀏覽器。現在,如果用戶點擊網站上的鏈接,它將打開一個沒有我原始UI的新窗口。例如,當您點擊Google新聞上的文章鏈接時,它會在新窗口中打開,但沒有任何我已編制的瀏覽控件。我還研究了Cef.WinForms.Example計劃,它的確做了同樣的事情。如何處理CefSharp中的彈出鏈接

以不同的方式處理這個問題嗎?我希望鏈接可以在新選項卡中打開,或者在新窗口中打開(所有控件都在那裏打開)。我一直在研究GitHub的問題,我找不到這樣的東西(也許我看起來不夠努力,因爲我認爲這也是別人想要做的......)。我瀏覽了瀏覽器控件的所有events,我找不到任何看起來像他們處理它的東西。

回答

12

ChromiumWebBrowser有一個LifeSpanHandler屬性。要手動控制Cefsharp中的彈出窗口,您必須實現您自己的使用ILifeSpanHandle接口的生命週期處理程序對象。

每次瀏覽器想要打開一個新窗口時,它都會調用您的生存期處理程序的OnBeforePopup函數。在這裏你可以實現你想要的行爲。如果您返回false,瀏覽器將彈出一個新窗口。如果您返回true,瀏覽器將忽略彈出操作,但您可以手動創建新窗口,新選項卡等...

這是一個非常簡單的自定義生命跨度手柄示例。在彈出請求時,它會觸發一個名爲PopupRequest的事件。您可以訂閱此類事件並手動創建新窗口/選項卡。然後,它返回true,指示ChromiumWebBrowser不創建它自己的新窗口。但是,您需要自行創建另一個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) 
    { 

    } 
} 
+0

哦,非常感謝。你是個好人 –