dポイントプレゼントキャンペーン実施中!

こんにちわです。
タイトル通りなのですが、
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など使用されたくないのですが・・・
入れ替えなどでも良いのですが。。。

宜しくお願いします。

A 回答 (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 は内弁慶なのです。

だから,なんとなく,要望されていることは不可能なような気もします。
自信はありませんが一応,回答の一種を書かせていただきました。

参考URL:http://hakuhin.hp.infoseek.co.jp/main/as/key.html

この回答への補足

こんばんわです。

大切な時間割いて頂きありがとうございます。

JSで書いてるのは、sassakunさんが言うような原理でだいたい合ってます。

私はまだFLASHについて、まだまだ勉強不足なので、
難しい事は言ったり出来ませんが・・・

質問してから、色々自分なりに調べた所、
あるサイトで、HTMLにFLASH埋め込んでるにも関わらず、
FLASHの所クリックしてF11やF5など押した場合は無効化されてるようなサイト発見したのですが、
原理的に?
一致しないキー?は無効化。
みたいな判定してるのではないかと思ったのですが・・・
私の無いに等しい知識では、特定までは出来なかったので・・・


例のサイト下記になります
http://homepage3.nifty.com/j_town/flashtype/1-1. …

大変申し訳ないですが、また助言頂けたら助かります。
宜しくお願いします。

補足日時:2006/04/18 19:34
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!