前往
大廳
主題

【備忘】在 NW.js 做出重新整理(等同瀏覽器F5功能)不會退出全螢幕模式之方法

♙♲⚙\~O_O~/⚙♲♙ | 2025-11-23 11:23:03 | 巴幣 10 | 人氣 23

全螢幕模式將使用 document.body.requestFullScreen() 之類的方式進入。
結論:主頁的外面套一層網頁,該外層網頁裡面使用 iframe 顯示主頁。因此 NW.js package.json 中的 "main" 將使用此外層網頁做為進入點。


實驗觀察:

0. NW.js 原生沒有 "F5 = 重新整理" ,怎麼按都沒有。
1. 在 top frame 執行以下皆會自動退出 document.body.requestFullScreen() 的全螢幕:
location.reload()
location.href=location.href
推測跟瀏覽器的"重新整理"功能相同的都會導致自動退出全螢幕。
2. 已經處於全螢幕的情況下,在 iframe 內 ocation.reload() 不會對全螢幕狀態造成影響。
2.1. 承上,外層的網頁中的 document.webkitFullscreenElement 會等於上述 iframe 。
2.2. 承上,上述全螢幕時把該 iframe 刪掉會退出全螢幕。
2.3. 結論:用外層進入全畫面可保留後續刪除該 iframe 的彈性。
3. same origin 的情況下,一般瀏覽器不會去擋存取跨層 window 底下東西的行為。
4. window.parent 可以拿到上層 window
5. 內層使用 window.moveBywindow.resizeBy 無效,應複寫函式使用外層 window 使用相同參數來呼叫。使用內 document.body.requestFullScreen() 亦同。
5.1. window.close 同理。不確定有沒有其他的。
6. 在內層修改 document.title 顯然不影響視窗上的標題。
6.1. 注意內外層的 location.search , location.hash 差異,內外層不共通。
7. 內外層的 Array 等預設 object type constructor 不共通,即使用 === 會得到 false
7.1 但是內外層建立出來的相同 immutable type (例如字串、數字) instance 使用 === 會得到 true ( 例如內層數字1 === 外層數字1 ) 。

應該還有其他該記錄上來的東西,但我現在還沒想到。

本來應該要打成教學文,但是因為給 RMMV 做的遊戲用的 plugin 做出來了所以就

相關創作

更多創作