CEF拦截js层alert弹窗 OnJSDialog 《转》
时间: 2023-12-01 13:03:02 浏览: 34
CEF是指Chromium Embedded Framework,它是一个开源的嵌入式Web浏览器控件库。在使用CEF时,我们可以通过实现OnJSDialog方法来拦截js层的alert弹窗。具体方法如下:
1. 继承CefJSDialogHandler类并实现OnJSDialog方法,该方法会在js层调用alert方法时被触发。
2. 在OnJSDialog方法中,我们可以通过调用CefJSDialogCallback的方法来自定义弹窗显示内容。
3. 在CefBrowserSettings中设置dialog_handling属性为true,以启用自定义弹窗处理。
下面是一个示例代码:
```
class MyJSDialogHandler : public CefJSDialogHandler {
public:
virtual bool OnJSDialog(CefRefPtr<CefBrowser> browser, const CefString& origin_url, const CefString& accept_lang, JSDialogType dialog_type, const CefString& message_text, const CefString& default_prompt_text, CefRefPtr<CefJSDialogCallback> callback, bool& suppress_message) override {
if (dialog_type == JSDIALOGTYPE_ALERT) {
// 自定义弹窗处理逻辑
CefString new_message_text = "这是一个自定义的alert弹窗:" + message_text;
callback->Continue(true, new_message_text, "");
return true;
}
return false;
}
};
CefRefPtr<CefBrowser> browser = ...; // 创建浏览器实例
CefRefPtr<CefJSDialogHandler> dialog_handler = new MyJSDialogHandler();
CefBrowserSettings browser_settings;
browser_settings.dialog_handling = STATE_ENABLED;
browser->GetHost()->SetJSDialogHandler(dialog_handler);
browser->GetHost()->SetBrowserSettings(browser_settings);
```
通过以上步骤,我们就可以实现拦截js层的alert弹窗并自定义处理了。