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 —— 擁有良好的兼容性。 2、有了性能強悍的 WebView2,我們還想把前端好用的東西搬上桌品嘗,例如 React hooks,Ant Design, Babel 等等,不會前端開發(fā)環(huán)境沒有關系,今天我們簡單一點,直接在網(wǎng)頁中引入 Babel。不用擔心,因為 WebView2 實在太快了,即使在網(wǎng)頁中直接調(diào)用 Babel 編譯,速度也是快如閃電,寫這么個簡單的頁面完全沒問題。
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ù)組。 <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ù)真正的返回值。 |
|