CEF(Chromium Embedded Framework)是由Google開發的一個嵌入式Web Browser控件,適用于各種平臺的應用程序中,常用于打開網頁、Web服務等。
在使用CEF時,我們經常會遇到需要將返回的數據以JSON格式進行處理的情況,同時CEF也提供了相應的函數來實現這個功能。
CefRefPtr<CefV8Value> json; CefRefPtr<CefTaskRunner> task_runner = CefTaskRunner::GetForCurrentThread(); task_runner->PostTask(CefCreateClosureTask([json, callback]() { CefRefPtr<CefV8Context> context = CefV8Context::GetCurrentContext(); if (!context.get()) { callback.Execute(CefV8Value::CreateNull()); return; } CefRefPtr<CefFrame> frame = context->GetFrame(); if (!frame.get()) { callback.Execute(CefV8Value::CreateNull()); return; } CefRefPtr<CefRequest> request = frame->GetURLRequest(); CefRefPtr<CefResponse> response = request->GetResponse(); CefRefPtr<CefStreamReader> reader = response->GetStreamReader(); if (reader->HasData()) { std::string json_str = reader->ReadAll(); CefRefPtr<CefV8Value> json = CefParseJSON(json_str, JSON_PARSER_RFC); callback.Execute(json); } }));
以上代碼中,我們通過獲取當前的CEF上下文,并通過該上下文中的frame獲取請求對象的響應數據流,最后解析JSON字符串并返回。
在實際應用中,我們可以將這段代碼封裝成一個函數,方便使用。
CefRefPtr<CefV8Value> GetJSON(CefRefPtr<CefV8Context> context) { CefRefPtr<CefV8Value> json; CefRefPtr<CefTaskRunner> task_runner = CefTaskRunner::GetForCurrentThread(); task_runner->PostTask(CefCreateClosureTask([json]() { ... })); return json; }
通過封裝,我們可以在其他地方直接調用GetJSON函數獲取JSON對象。
下一篇vue 更改rem大小