- 締切済み
ファンクションキー制御?
こんにちわです。 タイトル通りなのですが、 JSでは、 function kdown(e) {var msg =""; var flg = 1; switch(window.event.srcElement.tagName){ case "INPUT" :if(event.srcElement.type != "text" && event.srcElement.type != "password" && event.keyCode!=9 && event.keyCode!=16 && event.keyCode!=32){return false;}else{flg=0;}break; case "TEXTAREA" :flg = 0;break; case "SELECT" :flg = 0;break; case "A" :flg = 2;break; } switch(event.keyCode){ case 8 :msg = "BS";break; case 78 :if(event.ctrlKey){msg = "Ctrl+N";}break; case 82 :if(event.ctrlKey){msg = "Ctrl+R";}break; case 116 :msg = "F5";break; case 122 :msg = "F11";break; } if(event.altKey){msg = "Alt";} if (flg == 0 ){switch(event.keyCode){case 8 :msg = "";break;case 13 :msg = "";break;}} else if (flg == 2 && event.keyCode==13)msg = ""; if(msg != ""){event.keyCode = 0;return false;}else{return true;} } document.onkeydown = kdown; こんな感じに制御するのを、 アクションスクリプトで制御出来ますか? HTMLにこのJS埋め込んでも、FLASHの所クリックして、 各キー押すと意味なくなってしまうので・・ F5やF11など使用されたくないのですが・・・ 入れ替えなどでも良いのですが。。。 宜しくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
>> こんな感じに制御するのを、 >> アクションスクリプトで制御出来ますか? 実際にHTMLに書かれている JavaScript を書き込んで,実験してみました。 たしかに,「F5(リロード)」も「F11(ウィンドウの最大化)」も阻止できますね。 >> HTMLにこのJS埋め込んでも、FLASHの所クリックして、 >> 各キー押すと意味なくなってしまうので・・ これも,実際に検証できました。 上で作った HTML に 何でもない Flash を貼り付けて, Flash をクリックして Flash に フォーカス を移した場合,上の制御は無効になります。 しかし, どのような仕組みで,F11 などを無効にしているのでしょうか。 その原理がわかりません。 変数 msg に適当な値を入れるようにスクリプトを組んでおくと, そのスクリプトが優先されるので,自動的に F11 が無効になるのでしょうか? もし,そういう原理だと Flash には通用しないと思います。 ステージ上に msg という変数名のダイナミックテキストを作成し, ステージ上に適当な ムービークリップ を別に作って, そのムービークリップに次のようなスクリプトを書くと,変数名 msg のダイナミックテキストには "F11" が表示されるのですが, F11キーは無効にはなりません。 ------------------------------------ onClipEvent (enterFrame) { // 押したキーが "F1" のとき if (Key.getCode() == 122) { _root.msg = "F11"; } } ------------------------------------ また,次のように書いた場合は, 他のキーでは大丈夫ですが, F5 や F11 には全く通用しません。 つまり "F11" すら表示されません。 ------------------------------------ onClipEvent (keyDown) { // 押したキーが "F1" のとき if (Key.getCode() == 122) { // _root.msg = "F11" } } ------------------------------------ まず,優先されるのは, ブラウザのキー操作だと思います。 onClipEvent (enterFrame) のときは, Flash からも 後からキーを拾えるので,表示だけは可能なようです。 Flash で キー は拾えますが, それと,キー操作を無効にするのとは別なようです。 JavaScript は詳しくないもので,よくわからないのですが, 何か特殊な仕掛けをつくられているのでしょうか, それとも, キーを押したときに JavaScript で無意味な動作をするようにしておけば, 勝手に ブラウザ直 より JavaScript の方が優先されるので, ブラウザに対してのキー操作が無効になるのでしょうか。 Flash は Flash 内に関してのみ色々できますが, Flash 外のことに関しては,ブラウザやJavaScriptを優先するようにできているので, ActionScript ではできないような気がします。 Flash には Windowクラスも,(HTMLをdocmentとした場合の)Docmentクラスもありません。 おかげで,Flash自体の大きさを変えたり,Flashの背景色を変えることすら,ActionScript では不可能です。 逆に,Flash自体の大きさを変えたり,Flashの背景色を変えることは JavaScript ではできます。 Flash は内弁慶なのです。 だから,なんとなく,要望されていることは不可能なような気もします。 自信はありませんが一応,回答の一種を書かせていただきました。
補足
こんばんわです。 大切な時間割いて頂きありがとうございます。 JSで書いてるのは、sassakunさんが言うような原理でだいたい合ってます。 私はまだFLASHについて、まだまだ勉強不足なので、 難しい事は言ったり出来ませんが・・・ 質問してから、色々自分なりに調べた所、 あるサイトで、HTMLにFLASH埋め込んでるにも関わらず、 FLASHの所クリックしてF11やF5など押した場合は無効化されてるようなサイト発見したのですが、 原理的に? 一致しないキー?は無効化。 みたいな判定してるのではないかと思ったのですが・・・ 私の無いに等しい知識では、特定までは出来なかったので・・・ 例のサイト下記になります http://homepage3.nifty.com/j_town/flashtype/1-1.html 大変申し訳ないですが、また助言頂けたら助かります。 宜しくお願いします。