日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

試試激動人心的 WebView2

 只怕想不到 2021-09-14

WebView2 實在誘人,最新的 Edge(Chromium) 性能強悍,而且所有使用 WebView2  的應用可以共用一個運行時,Windows 11 已經(jīng)自帶 WebView2 ,就連 Office 也會自動部署 WebView2 ,目前 WebView2 已經(jīng)被部署到 2億臺電腦,并且還在繼續(xù)增加 …… 未來是屬于 WebView2 的。即使目標電腦沒有安裝  WebView2 ,在 aardio  中調(diào)用 WebView2 以前也會自動檢測并安裝 —— WebView2 的下載安裝速度極快,所以對用戶體驗基本沒有影響,重要的是 WebView2  仍然支持老舊的、即將被淘汰的 Windows 7 —— 擁有良好的兼容性。

令人驚訝的是 WebView2 居然支持 COM 對象,這就非常舒服了,我們知道 aardio 先天對 COM 友好,所有 aardio 對象都可以自動轉換為 COM 對象,因此我們在 WebView2 中與 aardio 交互就非常方便,可能比其他瀏覽器組件都要方便。

要嘗試 WebView2 非常簡單,在工程向導里可以創(chuàng)建 WebView2 工程,也可以在新建窗口里簡單的創(chuàng)建 WebView2  單窗口示例。

今天我們一起小試一下 WebView2 ,寫一個小工具。

我們需要做到以下幾點:
1、在 aardio 中輕松愉快地嵌入 WebView2,生成極小的 EXE 文件。

2、有了性能強悍的 WebView2,我們還想把前端好用的東西搬上桌品嘗,例如 React hooks,Ant Design, Babel 等等,不會前端開發(fā)環(huán)境沒有關系,今天我們簡單一點,直接在網(wǎng)頁中引入 Babel。不用擔心,因為 WebView2 實在太快了,即使在網(wǎng)頁中直接調(diào)用 Babel 編譯,速度也是快如閃電,寫這么個簡單的頁面完全沒問題。
3、我們需要在網(wǎng)頁中調(diào)用 aardio 本地函數(shù),并且在網(wǎng)頁中通過 aardio 訪問電腦硬件接口,如果只是跑個網(wǎng)頁那就太沒意思了。我們要做瀏覽器做不了的事情。

我們之前剛剛寫了一個訪問路由器端口映射數(shù)據(jù)的庫 sys.upnp.nat ,就先拿這個來練手。今天要說的這個示例我已經(jīng)放到了 aardio 自帶的范例中,可以在以下位置打開:

圖片


運行后的效果:

圖片


關鍵代碼如下:

import win.ui;/*DSG{{*/var winform = win.form(text='UPnP 端口映射查看工具')/*}}*/
import web.view;var wb = web.view(winform);
import sys.upnp.nat;var natUpnp = sys.upnp.nat();
wb.external = { getMappingCollection = function(){ return web.json.stringifyArray(natUpnp.getTable()); }; deleteItem = function(externalPort,protocol){ return natUpnp.remove(externalPort,protocol) };}
wb.html = /**省略 HTML 代碼**/
winform.show();win.loopMessage();

上面 wb.external 導出了 JavaScript 可以調(diào)用的函數(shù)。因為 external 在返回表對象、數(shù)組時會轉換為 COM 對象,而我們在 React 加載的數(shù)據(jù)需要 JSON ,所以上面我們通過 web.json.stringifyArray(natUpnp.getTable())  返回一個 JSON 數(shù)組。

在網(wǎng)頁中調(diào)用 aardio 函數(shù)有 2 個重要的規(guī)則:
1、所有在 aardio 中導出到 JavaScript 的函數(shù)都是異步函數(shù),也就是 Promise 。
2、在網(wǎng)頁中調(diào)用 aardio 函數(shù),總是在界面線程中調(diào)用,這就避免了不必要的跨線程同步,非常方便。

再看一下網(wǎng)頁中調(diào)用 aardio  函數(shù)的關鍵代碼:

<script type='text/babel'>   const { useState,useEffect } =  React;   const App = () => {       const [data,setData] = useState([]);          useEffect(        async ()=> {          var ds = await aardio.getMappingCollection();          setData(JSON.parse(ds));        },[]      )             //其他代碼省略  };           ReactDOM.render(<App />, document.querySelector('#app')); </script>

注意 aardio.getMappingCollection() 返回一個 Promise ,而 await aardio.getMappingCollection() 才是返回 aardio 函數(shù)真正的返回值。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多