各位好
我目前在用html和js,在開發一個網頁
該網頁禁用鍵盤,包含功能鍵那些(ctrl、alt+tab、…)
目前我有在網路上找到資源是用「navigator.keyboard.lock();」
如此就可以鎖住鍵盤了
我用的環境是php7+appserv
在本機測試網址使用http://localhost:8080/test/question.html 時,這段js是可以work的,且鍵盤是有鎖住的
測試網址改成ip,http://192.168.1.110:8080/test/question.html ,就會出現錯誤「question.html:67 Uncaught TypeError: Cannot read properties of undefined (reading 'lock')」
架到伺服器(promox虛擬機)上面,並用網域網址,js便沒有出現錯誤,但是鍵盤並沒有被鎖住
想請問一下各位高手,這是什麼問題所導致的呢?網路上爬文看了一整天都沒有看出個所以然來,也不知道該如何解決?
或者,除了這個方法外,還有其他更優的解法呢?也歡迎提出來討論一下,謝謝
目前要控制裝置的,大多是不可能做到,補助性質的雖然可以。
但都要求需要 https 的協議去運行。
我推測你可能跑在非https的網頁下的關係。(因為LOCALHOST本身不限定,所以本機沒差)
附帶一提,也希望其它新手有看到了解一下。
網頁會有基於「本機安全性原則」,任何需要讀取、操作或改寫本機的相關設備。
大多是有限制或是有條件的處理方式。
當使用localhost的情況下,還可以視為在本機使用。有一些限制條件會自動解除。
但只要不是在localhost上。就會開始限制使用的方式。要注意這點。
所以我現在開發東西已經不會在使用localhost
根據這篇的說明
比較可能的原因是「瀏覽器的種類及版本」
跟 IP/domain name 沒什麼關係
順帶告訴你一個壞消息
就算解決了所有問題
可以在 Chrome 100 鎖定鍵盤
只要長按 Esc 鍵兩秒就可解除鍵盤鎖定
Security Considerations #
One concern with this API is that it could be used to grab all of the keys and (in conjunction with the Fullscreen API and the PointerLock API) prevent the user from exiting the web page. To prevent this, the spec requires the browser to provide a way for the user to exit from keyboard lock even if all of the keys are requested by the API.In Chrome, this escape hatch is a long (two second) Esc key press to trigger an exit from Keyboard Lock.