瀏覽器簡報播放與 Presentation API

過去 DR 三不五時都會思考,是否有便利地製作及播放聖經投影片的解決方案。曾為此製作出來的程式有諸如 PowerSwordSlideSword 等工具,然而它們雖然可用,但也稱不上好用。DR 始終覺得若是能夠完全採用網頁程式,才是最佳的跨平台方案,在程式交付上也是最為簡易。

 

幾個月前,作為 Mobile Web Bible 的延伸專案,DR 製作了一款可播放經文投影片的網頁雛型。不過當時的一個瓶頸,是不知如何讓網頁瀏覽器如同於一般的簡報軟體,可便利地將畫面投放在延伸螢幕上。直到最近再搜了一下文件,發現有個 Presentation API,才終於實現出來。

 

Presentation API 的使用方式可以參照以下的教學文件及範例:

 

簡單來說,此 API 的運用最至少需要製作兩張網頁,一張作為控制頁,讓使用者進行控制;另一張則作為簡報頁,顯示於延伸螢幕,並接收來自控制頁的訊息以做出反應。控制頁需起始一個 PresentationRequest 物件,並傳入作為簡報頁的網頁路徑。接著將特定的使用者操作(例如按下網頁上的某按鈕或設定熱鍵)與 PresentationRequest 物件的 start() 方法繫結起來。當執行該操作後,Google Chrome 瀏覽器會彈出螢幕投放的設定選項,設定後便會在指定螢幕上,以全螢幕開啟簡報頁,並得到一個 PresentationConnection 物件。之後就可以利用該物件的 send() 方法,向簡報頁傳送訊息,至於簡報頁則只要再監聽訊息,並做出反應即可。

 

雖然 Presentation API 已為 W3C 標準,然而目前來看似乎僅有在 Chrome/Chromium 上是真正可用的。Mozilla Firefox 雖有實作 API,但沒有具體可設定投放的途徑。主要的測試環境為 Fedora 32,Firefox 版本為 78,Chrome 版本則為 83。此外須留意的是,前述的描述皆是針對桌面版本,DR 未測試行動版瀏覽器的運作情形。

 

 

上面的桌面擷圖,是 DR 用雙螢幕來模仿電腦連接投影機的情形。兩台螢幕刻意採用相同的解析度(X 伺服器設定見此附圖),讓圖片看起來對稱些。左邊螢幕即是控制頁,位於網址列右側的其中一個圖示,即表示投放功能正在使用中;右邊則為投放出的簡報頁。至於中間則再亂入一個 Visual Studio Code 視窗,以表明這是延伸螢幕的模式。

 

這看起來確實是很實用了,不過 Presentation API 有一項讓 DR 覺得不是很方便的地方,就是其規格明確地要求簡報頁是以無快取的方式開啟,並且在關閉時也須銷毀所有快取。以 Chrome 上的實測來說,會察覺到每一次開啟簡報頁,都要重新下載所有資源,即便動用 Service Worker 也不會保存下來(service worker 會在網頁關閉時銷毀)。因此,倘若期望減少應用程式的資料傳輸量,設計上可能就要有一些變通方式。

 

最後的一項提醒,是在 Chrome 上投放簡報頁後,雖然外觀上似乎沒有可對其開啟開發者工具的途徑,但只要將滑鼠移到簡報頁上,再透過右鍵選單就能夠呼叫出來了。

 

分類: