前言
本文為開發nw中遇到的各種問題,僅以記錄供備忘以及遇到相同問題的人的一點點解決思路。
1. package.json中的window字段無效
原因:package.json
中的window
字段,只在main
欄位為*.html
或是外部網址時有效,當為*.js
時是無效的。
{ "name": "blog", "main": "http://php.cn/",//main为网址,下方的window设定有效 //"main": "index.html",//main为 *.html,下方的window设定有效 //"main": "index.js?1.1.11",//main为 *.js,下方的window设定无效!! "version": "0.0.1", "window": {"title": "Nw.js Demo",//如果 index.html没有title,则会显示这里的值"icon": "assest/img/logo.png",//标题栏图标"position": "center",//默认显示位置"width": 1280,"height": 680,"frame": true,//是否显示最外层的框架,设为false之后 窗口的最小化、最大化、关闭 就没有了"resizable": true,"min_width": 1028 },}
關於其他package.json中的可使用的配置請參閱官網:
2. nw-builder一次只能打包一個項目
nw預設不包含打包成.exe檔的形式,遂nw-builder
項目為自動將nw應用打包壓縮成可執行檔的程式。
詳見:
假設nw-builder的設定檔如下:
var nw = new NwBuilder({ version: '0.14.7', files: './app/**',//nw应用项目目录 platforms: ['win32'], });
設定欄位files指定了app資料夾下的所有文件,但app資料夾下存在兩個項目:nw-demo和zfile-explorer
對於這種情況nw-builder只會打包出按檔案名稱排序的第一個文件夾項目:nw-demo
3. 在nw中植入全域變數的方法
前提:需要在nw專案中的package.json中的main欄位指定為*.js檔案。或是指定本地的.html檔案後再載入js檔案
package.json文件{ "name": "nw-demo", "version": "1.0.0", "description": "", "main": "./main.js?1.1.11", "scripts": {"start":"cd ../../ & gulp nw" }, ...}
#在mian欄位指定的js檔案中,再使用nw.Window.open
來載入指定本機頁面或是外部網址,如:
main.js文件:nw.Window.open('./view/index.html', {height:600,width:800}, function (win) { });
在這個js檔案中可以使用4種方法植入全域變數或全域方法:
1、將全域變數使用var方式宣告賦值
2、將全域變數直接賦值,無定義
3、將全域變數掛載到window
上
4、將全域變數掛載到global
上
測試程式碼:
main.js文件//var定义方式var xxcanghai_1 = 1;//直接赋值方式xxcanghai_2 = 10;//挂载到window对象上window.xxcanghai_3 = 100;//挂载到global对象上global.xxcanghai_4 = 1000;
在用nw動態載入的頁面中寫入一下程式碼測試
./view/index.html文件 <script> console.log(xxcanghai_1);//报错 console.log(window.xxcanghai_1);//undefined console.log(global.xxcanghai_1);//1 console.log(xxcanghai_2);//报错 console.log(window.xxcanghai_2);//undefined console.log(global.xxcanghai_2);//10 console.log(xxcanghai_3);//报错 console.log(window.xxcanghai_3);//undefined console.log(global.xxcanghai_3);//100 console.log(xxcanghai_4);//报错 console.log(window.xxcanghai_4);//undefined console.log(global.xxcanghai_4);//1000 </script>
結論:
在動態載入的頁面中,存取全域變數只能使用global.*
的方式 。
之所以會這樣是因為nw的運行環境是chromium和Nodejs混合的。所以可以在網頁js執行Nodejs程式碼。
雖然可以但不應該!
從頁面程式碼的責任一致性上不應該在網頁程式碼中編寫nodejs程式碼,遂應該將global中的物件寫入每個網頁的window物件中。之後頁面代碼再從window.*
中呼叫
植入每個頁面window中的方法
可利用nw的對package.json
擴充字段的inject_js_start
和inject_js_end
來實作。
官方說明:
inject_js_start: The injecting JavaScript code is to be executed after any files from css, but before any other DOM is constructed or any script script is runother .inject_js_end: The injecting JavaScript code is to be executed after the document object is loaded, before onload event is fired. This is mainly to be used openas an option of Windasow.option of Windasow. ) to inject JS in a new window.
http://docs.nwjs.io/en/latest/References/Manifest%20Format/#inject_js_start
inject_js_start
欄位指向本地的js文件,他可以在載入的任何頁面的任何頁面js執行前執行。
package.json文件:{ "name": "blog", "version": "1.0.0", "main": "./main.html", "inject_js_start": "./js/inject_js_start.js?1.1.11",//设置所有页面前植入的js文件地址 "author": "php@gmail.com", "license": "ISC",}
在植入的js檔案中,將global中的變數賦值到目前頁面window中
./js/inject_js_start.js文件://将node的global中的变量写入每个即将打开的页面的js的window对象中window["xxcanghai_1"] = global["xxcanghai_1"]
之後即可在任何nw開啟的頁面中透過window.xxcanghai_1
來存取全域變數了。
4. nwjs主進程出現異常後不顯示窗體
現象:nwjs主進程出現異常後不顯示窗體,不彈出錯誤提示,也不會自動結束進程
原因:package.json
文件中的main
欄位為.js
文件,同時此js文件出現error時會出現此問題。
解決方案:package.json
文件中的main
欄位使用.html
文件,然後再載入要執行的nw主程式js檔即可。這樣即使報錯了也會顯示出空窗口,同時也可以透過開發者工具列查看問題原因,使用者也可以關閉應用,不至於無法結束進程。
其他教學文章
使用 NW.js 將 Web 應用程式打包為桌面應用程式
以上是JS開發桌面端應用程式教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

H5提供了多種新特性和功能,極大地增強了前端開發的能力。 1.多媒體支持:通過和元素嵌入媒體,無需插件。 2.畫布(Canvas):使用元素動態渲染2D圖形和動畫。 3.本地存儲:通過localStorage和sessionStorage實現數據持久化存儲,提升用戶體驗。

H5和HTML5是不同的概念:HTML5是HTML的一個版本,包含新元素和API;H5是基於HTML5的移動應用開發框架。 HTML5通過瀏覽器解析和渲染代碼,H5應用則需要容器運行並通過JavaScript與原生代碼交互。

HTML5的關鍵元素包括、、、、、等,用於構建現代網頁。 1.定義頭部內容,2.用於導航鏈接,3.表示獨立文章內容,4.組織頁面內容,5.展示側邊欄內容,6.定義頁腳,這些元素增強了網頁的結構和功能性。

HTML5和H5沒有區別,H5是HTML5的簡稱。 1.HTML5是HTML的第五個版本,增強了網頁的多媒體和交互功能。 2.H5常用於指代基於HTML5的移動網頁或應用,適用於各種移動設備。

HTML5是超文本標記語言的最新版本,由W3C標準化。 HTML5引入了新的語義化標籤、多媒體支持和表單增強,提升了網頁結構、用戶體驗和SEO效果。 HTML5引入了新的語義化標籤,如、、、等,使網頁結構更清晰,SEO效果更好。 HTML5支持多媒體元素和,無需第三方插件,提升了用戶體驗和加載速度。 HTML5增強了表單功能,引入了新的輸入類型如、等,提高了用戶體驗和表單驗證效率。

如何寫出乾淨高效的HTML5代碼?答案是通過語義化標籤、結構化代碼、性能優化和避免常見錯誤。 1.使用語義化標籤如、等,提升代碼可讀性和SEO效果。 2.保持代碼結構化和可讀性,使用適當縮進和註釋。 3.優化性能,通過減少不必要的標籤、使用CDN和壓縮代碼。 4.避免常見錯誤,如標籤未閉合,確保代碼有效性。

H5通過多媒體支持、離線存儲和性能優化提升網頁用戶體驗。 1)多媒體支持:H5的和元素簡化開發,提升用戶體驗。 2)離線存儲:WebStorage和IndexedDB允許離線使用,提升體驗。 3)性能優化:WebWorkers和元素優化性能,減少帶寬消耗。

HTML5代碼由標籤、元素和屬性組成:1.標籤定義內容類型,用尖括號包圍,如。 2.元素由開始標籤、內容和結束標籤組成,如內容。 3.屬性在開始標籤中定義鍵值對,增強功能,如。這些是構建網頁結構的基本單位。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。