CEF3 在同一窗口打开新的网页
时间: 2023-12-04 10:01:39 浏览: 284
winform使用谷歌浏览器内核(安装cefSharp第三方包),浏览网页,获取网页源码
5星 · 资源好评率100%
您可以使用 CEF3 中的 `CefBrowserHost::CreateBrowser` 方法来在同一窗口中打开新的网页。具体来说,您需要在您的应用程序中实现 `CefLifeSpanHandler` 接口,并重写其 `OnBeforePopup` 方法。在该方法中,您可以拦截新的弹出窗口,并使用 `CefBrowserHost::CreateBrowser` 方法在同一窗口中打开该网页。下面是一个示例代码片段:
```cpp
class MyLifeSpanHandler : public CefLifeSpanHandler {
public:
CefRefPtr<CefBrowser> CreateBrowser(
CefRefPtr<CefWindowInfo> window_info,
CefRefPtr<CefClient> client,
const CefString& url,
const CefBrowserSettings& settings,
CefRefPtr<CefDictionaryValue> extra_info,
CefRefPtr<CefBrowserContext> browser_context) override {
// 在同一窗口中创建新的浏览器
CefRefPtr<CefBrowser> browser = CefBrowserHost::CreateBrowserSync(
window_info, client, url, settings, extra_info, browser_context);
return browser;
}
bool OnBeforePopup(
CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
const CefString& target_url,
const CefString& target_frame_name,
CefLifeSpanHandler::WindowOpenDisposition target_disposition,
bool user_gesture,
const CefPopupFeatures& popupFeatures,
CefWindowInfo& windowInfo,
CefRefPtr<CefClient>& client,
CefBrowserSettings& settings,
CefRefPtr<CefDictionaryValue>& extra_info,
bool* no_javascript_access) override {
// 拦截新的弹出窗口
// 使用 CreateBrowser 在同一窗口中打开网页
CefRefPtr<CefBrowser> new_browser = CefBrowserHost::CreateBrowserSync(
windowInfo, client, target_url, settings, extra_info, browser->GetBrowserContext());
return true;
}
IMPLEMENT_REFCOUNTING(MyLifeSpanHandler);
};
```
然后,您需要在创建 `CefBrowser` 对象时将 `MyLifeSpanHandler` 对象传递给 `CefBrowserSettings` 对象的 `lifespan_handler` 成员。例如:
```cpp
CefRefPtr<CefBrowser> browser = CefBrowserHost::CreateBrowserSync(
window_info, client, url, settings, extra_info, browser_context);
CefRefPtr<MyLifeSpanHandler> lifespan_handler = new MyLifeSpanHandler();
CefRefPtr<CefBrowserSettings> browser_settings = browser->GetHost()->GetBrowserSettings();
browser_settings->lifespan_handler = lifespan_handler;
```
阅读全文