HTML5でビデオや音楽を再生している時にスクリーンセーバーを無効にすることはできるか?
結論から言うと不明。現在のところは多分無理。
HTML5でビデオや音楽を再生している時にふと気づいた。スクリーンセーバーがいちいち起動するのがウザいなと。
Flashならフルスクリーン時には自動的にスクリーンセーバーを無効にしてくれるのだが、HTML5やJavascriptのレベルでスクリーンセーバーを無効にすることはできるのか?もしできないとすれば、HTML5のウェブアプリの非常に大きなUX的問題じゃないか?
と思って色々調べてみたら、2009年頃から問題になっていて4年経った今まで解決されていない問題らしい_| ̄|○
html5 - How to prevent a monitor from sleeping while watching html 5 animation - Stack Overflow
そう。Huluなんかでフルスクリーン時にスクリーンセーバーが起動しないのはFlashのおかげなんだよね。これもまだ脱Flashできない一つの理由になっていると思う。実際、この問題が発覚したためにFlashに戻ったと言ってる人も居た。
これは問題だよ。彼の意見に賛成だ。HTML5の仕様に書き加えられるべきだと思う。
517870 – Fullscreen video should disable screensaver during playback
ここまでのところで「まぁ大体ムリだろうな」ということは分かったのだけれど、彼らの議論の中でひとつ希望っぽいものがあった。
それは、「Javascriptから定期的に仮想的にマウスイベントやキーボードイベントを発行してみたらどうか?」というもの。なるほど。
ということでやってみた。結論から言うと役に立たなかった。
イベントの発行方法についてはこちらを参考にさせて頂いた。
JavaScript Tips – dispatchEvent を使いこなそう!! | TM Life
上のボタンで、仮想的に下のボタンを10秒に1回クリックするタイマーを開始・停止できる。
コードはこんな感じ。
つまり、目論見通りならば、仮想的にマウスクリックを起こすことでユーザーの手でマウスを動かしているのと同じことになって、スクリーンセーバーの起動を阻止できるんじゃないか?と。
確かに、ブラウザ内ではマウスイベントが起こっているように見えるが、それがOSレベルにまで伝わっている気配はない。
残念だ。
HTML5でビデオや音楽を再生している時にふと気づいた。スクリーンセーバーがいちいち起動するのがウザいなと。
Flashならフルスクリーン時には自動的にスクリーンセーバーを無効にしてくれるのだが、HTML5やJavascriptのレベルでスクリーンセーバーを無効にすることはできるのか?もしできないとすれば、HTML5のウェブアプリの非常に大きなUX的問題じゃないか?
と思って色々調べてみたら、2009年頃から問題になっていて4年経った今まで解決されていない問題らしい_| ̄|○
html5 - How to prevent a monitor from sleeping while watching html 5 animation - Stack Overflow
そう。Huluなんかでフルスクリーン時にスクリーンセーバーが起動しないのはFlashのおかげなんだよね。これもまだ脱Flashできない一つの理由になっていると思う。実際、この問題が発覚したためにFlashに戻ったと言ってる人も居た。
I have shifted back to flash plugins since I had this issue. Haven't gone back..
これは問題だよ。彼の意見に賛成だ。HTML5の仕様に書き加えられるべきだと思う。
517870 – Fullscreen video should disable screensaver during playback
It's not possible in pure HTML. Hulu does it because it's Flash-based, and the plugin has access to the OS layers, which is something JS or HTML does not have. So the only way to do this would be to have a new paragraph in the HTML5 spec.
ここまでのところで「まぁ大体ムリだろうな」ということは分かったのだけれど、彼らの議論の中でひとつ希望っぽいものがあった。
それは、「Javascriptから定期的に仮想的にマウスイベントやキーボードイベントを発行してみたらどうか?」というもの。なるほど。
ということでやってみた。結論から言うと役に立たなかった。
イベントの発行方法についてはこちらを参考にさせて頂いた。
JavaScript Tips – dispatchEvent を使いこなそう!! | TM Life
上のボタンで、仮想的に下のボタンを10秒に1回クリックするタイマーを開始・停止できる。
コードはこんな感じ。
<button id="btnTimer" onclick="onClickBtnTimer();>仮想クリックタイマー開始</button> <button id="btnDummy" onclick="onClickBtnDummy();">ダミーボタン</button> <script type="text/javascript"> var timer = null; function onClickBtnTimer() { console.log("onClickBtnTimer()"); var btnTimer = document.getElementById("btnTimer"); if (timer) { console.log("タイマー停止!"); clearInterval(timer); timer = null; btnTimer.innerHTML = "仮想クリックタイマー開始"; } else { console.log("タイマー開始!"); timer = setInterval(function() { console.log("インターバル!"); var evt = document.createEvent("MouseEvents"); evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); var btnDummy = document.getElementById("btnDummy"); btnDummy.dispatchEvent(evt); //ここで仮想クリック! }, 10000); btnTimer.innerHTML = "仮想クリックタイマー停止"; } } function onClickBtnDummy() { console.log("onClickBtnDummy()"); } </script>
つまり、目論見通りならば、仮想的にマウスクリックを起こすことでユーザーの手でマウスを動かしているのと同じことになって、スクリーンセーバーの起動を阻止できるんじゃないか?と。
確かに、ブラウザ内ではマウスイベントが起こっているように見えるが、それがOSレベルにまで伝わっている気配はない。
残念だ。
コメント
コメントを投稿