1. 程式人生 > >在 Soui 中嵌入 MiniBlink 初體驗(一):支援百度 ECharts 開源視覺化庫顯示

在 Soui 中嵌入 MiniBlink 初體驗(一):支援百度 ECharts 開源視覺化庫顯示

一、引言

最近在工作中遇到了這麼一個需求:

產品想要讓我們的桌面客戶端中顯示覆雜的圖表,類似下圖所示的樣子(圖片來自網路),不排除後期會增加更多複雜圖示的可能性,因此我們需要考慮如何實現這種需求,並能夠支援其需求的擴充套件性

餅狀圖

那麼,看到這個需求,我腦海裡進行了一系列的思考:

1. 我們能不能使用 SOUI 原生介面來製作?

答案是肯定的。至少在我現有的實力和時間精力來說,這是不可行的。

2. 那麼,我們能不能考慮嵌入瀏覽器,然後使用 Web 技術完成呢?

通過同事的建議,我找到了百度的開源視覺化庫 ECharts。看了下文件,覺得這個庫做的非常的好,而且穩定更新了很多版本了,非常適合使用 Web 技術跨平臺的需求。因此,我選擇了它。

3. 那麼,在我們現在使用的 Soui 框架中,我們選擇什麼技術嵌入瀏覽器呢?

在我接觸 Soui 的過程中,一共接觸了 3 種嵌入瀏覽器的方法,分別是 wke 、cef 和這篇部落格使用的 miniblink 方式。wke 因為比較老了,對於 H5 的支援並不好,有些需求就無法滿足了(這是 SOUI 官方 Demo 中自帶的嵌入瀏覽器的方式);cef,嵌入瀏覽器的學習門檻較高,要熟練使用還需要很多時間去探索(關於 cef 我有專門探索過一段時間,在這裡因為專案的特殊性,不能使用 cef);最後,選擇了國人一位高人開發的 miniblink。

MiniBlink 是一個全新的、追求極致小巧的瀏覽器核心專案(厚顏無恥的使用了作者的話 )。其相容了 wke 的介面,自己實現了渲染層,並集成了 node,是基於 blink 核心的。本人對於 MiniBlink 還並不瞭解,此處只是作為一個使用者來看待它的。

這一篇部落格中借鑑了 Soui 群裡的一位大神的 SouiAndMb 程式碼,想要獲取的同學可以去 Soui 群裡下載,群號為 229313785。

二、咦?wke 居然不能完全支援 ECharts!

為了偷懶,當然是儘量能少寫程式碼就少寫程式碼咯:)

因此,我這裡直接使用了 Soui 官方 Demo 中的那個預設使用了 wke 核心的嵌入瀏覽器。現在我們使用嵌入瀏覽器來開啟百度 ECharts 的官方示例。

結果是非常尷尬的 T_T

比如說:

這是 Soui 使用 wke 核心顯示的 ECharts 餅圖
wke1

而這是 Chrome 中顯示正常的 ECharts 餅圖
Chrome1

但 wke 也不是什麼都不能顯示出來,比如說折線圖還是可以 Hold 住的:

這是 Soui 使用 wke 核心顯示的 ECharts 線圖
wke2

而這是 Chrome 中顯示正常的 ECharts 線圖
Chrome2

可見,對於 wke 來說,ECharts 有些是顯示不出來的,那麼這是為什麼呢?

因為 wke 太老了,很多 H5 的特性都沒能支援,而 Chrome 是支援 H5 最好的瀏覽器。

也就是說,ECharts 在顯示某些圖表的時候,使用到了 H5 的新特性,導致我們比較老的 wke 核心無法支援其顯示。

那,接下來我們肯定就要尋找一款能夠支援 H5 的嵌入瀏覽器核心了。

注:這一塊的探索程式碼在 ECharts In Soui 解決方案中的 ECharts In Soui with Wke,很明顯最後的結果是失敗的。

三、在 Soui 中嵌入 MiniBlink

通過網友推薦,我接觸到了 MiniBlink 這一個強大的國人開發的庫。其輕巧、對於 H5 的良好支援給我留下了深刻的印象。

此處,正好 Soui 群裡有位前輩研究過 Soui 中嵌入 MiniBlink 的方法。這裡我直接下載了他的包進行了研究。

這裡,我從使用 Soui 嚮導建立一個 Soui 新專案開始,手把手總結如何在 Soui 中嵌入 MiniBlink 瀏覽器:

1. 新建一個 Soui 專案,此處我命名為了 ECharts In Soui with MiniBlink。
此時,我們的Soui 專案是空的,執行出來只是一個簡單的視窗而已,我們要達到顯示 ECharts 的目標,還需要編寫一個封裝了 MiniBlink 的瀏覽器控制元件。

2. 編寫封裝了 MiniBlink 的瀏覽器控制元件。
a. 在專案目錄下建立一個 controls 資料夾,用來放置我們的 SMiniBlink 瀏覽器控制元件。
b. 這裡,我直接參考了 Soui 群裡前輩封裝的 SMiniBlink 程式碼(想要獲取的同學,可以直接檢視我在 GitHub 上託管的專案,或者進入 Soui 群下載 SouiAndMb 檔案即可)
c. 注意,SMiniBlink.h 需要包含一個 wkedefine.h 的標頭檔案,這是 MiniBlink 自帶的標頭檔案,我們需要包含進去。在專案目錄下建立一個 miniblink 資料夾,將 wkedefine.h 放置進去。同時,修改 SMiniBlink.h 中包含 wkedefine.h 的目錄為 ../miniblink/wkedefine.h。建立好的檔案目錄結構如下:
dir
d. 為了使我們的控制元件可以使用,我們還需要進行控制元件的註冊:開啟 ECharts In Soui with MiniBlink.cpp 檔案,將

SWkeLoader wkeLoader;
theApp->RegisterWindowClass<SWkeWebkit>();

註冊程式碼加入到 Run Application 之前。同時,為了讓其能訪問到 SWkeLoader 這個類(定義在 SMiniBlink 中,控制瀏覽器控制元件的生命週期),我們還需要包含我們的瀏覽器控制元件類

#include "controls/SMiniBlink.h"

3. 至此,我們已經可以通過編譯了。但是,MiniBlink 使用到了 node.dll 動態連結庫,如果程式訪問不到這個檔案,就會報錯。因此,我們還需要拷貝 node.dll 到當前的編譯目錄(解決方案目錄下的 Debug 資料夾中)。

4. 編寫 xml 程式碼使用我們定義的瀏覽器控制元件:完成了這步,執行程式碼你就可以看到一個百度搜索介面了,我們進去搜索 ECharts 開啟示例程式碼,就能看到 ECharts 的顯示了

<wkeWebkit pos="0,0,-0,-0" url="http://www.baidu.com/" name="wke_test"/>

如圖,這就是我們 Soui 使用了 MiniBlink 顯示出來的 ECharts 餅狀圖效果:
MiniBlink

嘿嘿,至此,我們就完成了一個支援百度 ECharts 瀏覽器的嵌入啦:)

四、總結

到目前為止,我完成了 Soui 中嵌入 MiniBlink 的任務,卻留下了很遺憾的一個問題未能解決,那就是:

當我在本地編寫 Html 檔案,呼叫 ECharts 庫想要進行圖表的顯示時。通過 Soui 中的 MiniBlink 瀏覽器控制元件來開啟介面,會發現 ECharts 的渲染失敗;但是直接點選 Html 檔案通過 Chrome 瀏覽器開啟,就可以看到 ECharts 的渲染效果。

這是專案 ECharts In Soui with Miniblink 中開啟本地的 Html 檔案試圖顯示 ECharts 的結果:
Soui with MiniBlink

這是使用 Chrome 直接開啟 Html 檔案的效果:
Chrome

可見啊,本地彷彿就沒有自動去拉取 ECharts 的 js 庫一樣,直接忽略了後面的柱形圖表的顯示,而後者加載出來了。

不管怎麼樣,儘管開啟本地 Html 網頁顯示 ECharts 還需要繼續調研,但是通過訪問網頁顯示 ECharts 還是沒有問題的(這是當然的咯,MiniBlink 支援 H5 嘛 T_T)

探索總是有益處的,比如說這次去探索了下 MiniBlink 在 Soui 中的嵌入,認識到了這個小巧的庫能夠帶來的喜悅感。

最後,感謝 Soui 和 MiniBlink 的作者和大神們,這是一次愉快的探索過程。

To be Stronger :)

ps: 想要獲取本篇部落格的實驗程式碼的同學,可以看看這裡(儘管沒有解決本地 Html 載入顯示 ECharts 的問題 T_T 如果你有什麼線索,一定要提供給我,在此謝謝了哈~~~)
wangying2016/ECharts-In-Soui

相關推薦

Soui 嵌入 MiniBlink 體驗()支援 ECharts 開源視覺顯示

一、引言 最近在工作中遇到了這麼一個需求: 產品想要讓我們的桌面客戶端中顯示覆雜的圖表,類似下圖所示的樣子(圖片來自網路),不排除後期會增加更多複雜圖示的可能性,因此我們需要考慮如何實現這種需求,並能夠支援其需求的擴充套件性 那麼,看到這個需求

運維改革探索()用多層級監控實現視覺運維

作者介紹 朱祥磊,山東移動BOSS系統架構師,負責業務支撐系統架構規劃和建設。獲國家級創新獎1項、通訊行業級科技進步獎2項、移動集團級業務服務創新獎3項,申請發明專利13項。 一、背景 當前運營商業務支撐系統正向雲化發展,以某移動公司為例,近年先後進行了經分系統雲化、大資料系統建設、BOSS雲化,現

QT體驗1如何學習QT之個人淺見,以及如何讀取文本文件,在調試信息輸出。

沒有 c++教程 最簡 將不 ror 聽說 講解 知識點 括號 2017年11月初,隨著工作崗位的調動,我轉到了研發崗,開始了漫漫程序員的成長之路。首先介紹下個人知識儲備,大一學習過C語言,沒有工程經驗,所學是為了期末考試+2級考試,考完在大學+碩士期間沒有用到編程。 來到

JSON體驗()

學校 auth dem .json 數據解析 ray 分析 opts 空字符串 在學校的呆了一段時間,馬上又要回去工作了,不說了,我現在介紹一下json相關的內容 1.JSON數據格式(總的來說,json就是一個字符串)   1.整體結構     String json1

實戰區塊鏈hyperledger fabric 體驗 - 3 鏈碼實例安裝、實例、調用及代碼

區塊鏈 hyperledger fabric blockchain 本文鏈碼實例為Fabric 官方實例examples/chaincode/go/chaincode_example02,實現簡單的轉賬功能進入到cli容器裏面$ docker exec -it fabric-cli bash1

spring體驗 之helloworld

getbean sta 創建 http inf id屬性 bubuko path 版本   今天開始學習spring,每天都會將自己學習的一些內容,或是一些總結以博客的形式記錄下來,方便自己以後回顧,如果能給他人學習帶來丁點的幫助那也是最好不過了。本系列博文的spring學

Java併發程式設計體驗()

一.前言 作業系統的出現使得計算機每次能執行多個執行程式,並且不同的程式都在單獨的程序中執行;作業系統為各個獨立執行的程序分配各種資源,包括記憶體、檔案控制代碼以及安全證書等。如果需要的話,在不同的程序之間可以通過一些粗粒度的通訊機制來交換資料,包括:套接字、訊號處理器、共享記憶體、訊號量以

JAVA的集合原始碼分析ArrayList的內部實現原理

作為以java為語言開發的android開發者,集合幾乎天天都要打交道,無論是使用頻率最高的ArrayList還是HashSet,都頻繁的出現在平時的工作中。但是其中的原理之前卻一直沒深入探究,接下來記錄一下這次自己學習ArrayList原始碼的過程。 一.構造方法:

CentOS 體驗 切換語言,連線網際網路

修改語言 當進入 CentOS 的時候,系統預設語言是英文,CentOS 有一個語言選擇框,如下圖: 當我們選擇 漢語(中國),然後重啟虛擬機器,就可以看到中文的介面了。 那麼怎麼再次切換成英文呢? 選擇完英文,重啟虛擬機器即可生

CentOS 體驗 Yum 安裝、解除安裝軟體

一:Yum 簡介 Yum(全稱為 Yellow dog Updater, Modified)是一個在Fedora和RedHat以及CentOS中的Shell前端軟體包管理器。基於RPM包管理,能夠從指定的伺服器自動下載RPM包並且安裝,可以自動處理依賴

MathType體驗——款很好用的數學公式輸入工具

記得上大學電路分析課時,看到老師在PPT中熟練的輸入複雜的數學公式,在畢業後的十幾年裡,再也沒遇到過這種場景。 直到昨晚,發現自己也有這個需要,於是,第一次接觸了MathType這個工具。用下來,感覺

使用CefSharp在.Net程序嵌入Chrome瀏覽器()——簡介

get 做到 ini nta args als sta 就是 c++ 原文:使用CefSharp在.Net程序中嵌入Chrome瀏覽器(一)——簡介有的時候,我們需要在程序中嵌入Web瀏覽器,其實.Net Framework中本身就提供了WebBrowser控件,本身這個是

使用CefSharp在.Net程式嵌入Chrome瀏覽器()——簡介

原文: 使用CefSharp在.Net程式中嵌入Chrome瀏覽器(一)——簡介 有的時候,我們需要在程式中嵌入Web瀏覽器,其實.Net Framework中本身就提供了WebBrowser控制元件,本身這個是最簡單易用的方案,但不知道是什麼原因,這個控制元件在瀏覽網頁的時候有些莫名的卡頓,有的時候甚至能

AngularJS體驗

我在網上搜了下,AngularJS使用DOM選擇,,,大牛說,學習AngularJS就忘掉JQuery...因為他們的設計的理念不一樣... 1、AngularJS允許我們使用angular.module()方法來宣告模組 這個方法能夠接受兩個引數,第一個是模組的名稱,第

C++嵌入IE瀏覽器(

    最近專案中用html 來做介面,也就折騰了一下在wxwidget中嵌入瀏覽器的若干細節工作,mfc也基本是類似的,由於wxwidget中已經做了一個封裝wxie,但是開發過程中也遇到了不少問題,在此做一下總結:  ie邊框 及上下文選單    普通嵌入到程式裡面的

在drawable下的xml檔案layer-list的用法直接指定已有圖片資源

layer-list可以實現多個圖片的疊加 一,在drawable目錄下建立layer.xml 其中,left,top,right,bottom屬性可以設定上層圖片距離底層圖片的上下左右的邊距 <

PMP在項目管理應用的體驗

不同 通過 人力 轉變 工具 leader pmp 方式 應用 寫這篇文章的初衷是總結一下學習PMP之後在項目管理中所產生的影響,也希望我的經歷能給同行者提供一些參考。首先介紹一下項目背景,兩個項目開發團隊,三大業務領域,每個業務領域的開發人員相互獨立,且同一個項目因為隸屬

TensorSpace套用於構建神經網路3D視覺應用的框架

作者 | syt123450、Chenhua Zhu、Yaoxing Liu (本文經原作者授權轉載) 今天要為大家推薦一套超酷炫的,用於構建神經網路 3D 視覺化應用的框架——TensorSpace。 有什麼用途? 大家可以使用類 Keras

18-12-7-視覺Seaborn學習筆記(Style)

目錄 安裝:pip install seaborn 程式碼: 5種主題風格 主題風格使用: sns.boxplot(data ) 用despine()刪除圖表邊框: sns.violinplot(資料) 畫子圖 sns.set_context(“紙”)

EF6學習筆記code-first簡單創建數據、表的一些過程

time img install 類名 開啟 屬性 bject nbsp 程序包管理 我的EF學習筆記是按照 汪鵬(網名Jeffcky) 大俠《你必須掌握的Entity Framework 6.x與Core 2.0》來弄的。 這也是我第一篇博客,感覺這東西不能亂寫啊,算