iT邦幫忙

0

網頁鍵盤鎖navigator.keyboard.lock沒辨法運作

  • 分享至 

  • xImage

各位好

我目前在用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便沒有出現錯誤,但是鍵盤並沒有被鎖住

想請問一下各位高手,這是什麼問題所導致的呢?網路上爬文看了一整天都沒有看出個所以然來,也不知道該如何解決?

或者,除了這個方法外,還有其他更優的解法呢?也歡迎提出來討論一下,謝謝

看更多先前的討論...收起先前的討論...
淺水員 iT邦大師 6 級 ‧ 2022-04-08 09:50:32 檢舉
https://developer.mozilla.org/en-US/docs/Web/API/Keyboard

滿多瀏覽器不支援的樣子
breakgod iT邦新手 2 級 ‧ 2022-04-08 09:51:21 檢舉
我主要是先針對chrome作開發,而目前chrome100應該是有支援到的才是
淺水員 iT邦大師 6 級 ‧ 2022-04-08 09:56:33 檢舉
會不會是跟 Secure contexts 有關?
https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts
breakgod iT邦新手 2 級 ‧ 2022-04-08 10:00:43 檢舉
我有試過window.isSecureContext,在local和網域網址的狀況下,會是安全的,只有在ip時會是不安全的
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
㊣浩瀚星空㊣
iT邦大神 1 級 ‧ 2022-04-08 13:21:27
最佳解答

目前要控制裝置的,大多是不可能做到,補助性質的雖然可以。
但都要求需要 https 的協議去運行。

我推測你可能跑在非https的網頁下的關係。(因為LOCALHOST本身不限定,所以本機沒差)

附帶一提,也希望其它新手有看到了解一下。
網頁會有基於「本機安全性原則」,任何需要讀取、操作或改寫本機的相關設備。
大多是有限制或是有條件的處理方式。
當使用localhost的情況下,還可以視為在本機使用。有一些限制條件會自動解除。
但只要不是在localhost上。就會開始限制使用的方式。要注意這點。

所以我現在開發東西已經不會在使用localhost

breakgod iT邦新手 2 級 ‧ 2022-04-08 13:32:43 檢舉

我在網域網址測試的是有https的,這點我也有確認過了。

1
海綿寶寶
iT邦大神 1 級 ‧ 2022-04-08 09:57:33

根據這篇的說明
比較可能的原因是「瀏覽器的種類及版本」
跟 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.

breakgod iT邦新手 2 級 ‧ 2022-04-08 10:01:38 檢舉

盡可能防君子,不防小人XD

breakgod iT邦新手 2 級 ‧ 2022-04-08 10:02:33 檢舉

我知道網頁要作到這點會有困難,所以,就先鎖定一種瀏覽器來作開發研究,謝謝

那就祝你好運了

我要發表回答

立即登入回答