WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:右クリック禁止の解釈につて

0:[投稿] Masa [2004/12/21 10:09 ][環境:IE6 IIS他]

JavaScriptを勉強中です。
「右クリック禁止」で、検索すると色々なパターンが紹介されてますが、
下記のような方法もよくあります。
------------------------------------------------------------
if(document.all || document.getElementById){
    document.onmousedown = RightClick;    //右クリックイベント取得
}else if(document.layers){
    window.captureEvents(Event.MOUSEDOWN);
    window.onmousedown = RightClick;    //右クリックイベント取得
}
function RightClick(e){
    if(document.all || document.getElementById){
        if(event.button & 2){
            alert("右クリック禁止です。");
            return false;
        }
    }else if(document.layers){
        if(e.which == 3){
            alert("右クリック禁止です。");
            return false;
        }
    }
}
------------------------------------------------------------
そこで質問なのですが、function RightClick内のalert()を消したいと思い、
alert()部分だけを削除しましたが、右クリック禁止機能自体が死んでしまいます。
どのような理屈で、右クリックを禁止するのにalert()が必要なのでしょうか。
falseを返せば事足りるような気がするのです。

どうぞよろしくお願いいたします。


1:[回答] (´д`;) [2004/12/21 14:17 ]

>>0 のスクリプトの場合、
手前の WinIE6 では「右クリック禁止」にはなりませんが。
よく知りませんが、今時は oncontextmenu とかを使うのでは。

そもそも「右クリック禁止」自体がナンセンス、かつ迷惑ですが。
最近のブラウザでは「右クリック禁止」を『禁止』できたりするので。
スクリプトが無効では役立たずだし、その必然性が全く理解できません。

なぜ「右クリック禁止」にするのか、よく考えたことがあるのでしょうか。
殆どの場合、制作者の勝手な都合を押し付けているだけではありませんか。
こんなことより、もっと有意義なことに時間を使うべきだとは思いませんか。


2:[回答] Masa [2004/12/21 17:05 ]

仕事で、イントラなんです。
そのような事、ユーザーさんに言えません。


3:[回答] (´д`;) [2004/12/21 18:58 ]

>>2
それでは仕方ありませんね……
ということは WinIE6 だけが前提ですか?
それならoncontextmenuイベントで防げると思いますが。

<script type="text/javascript">
<!--
document.oncontextmenu = function() { return false };
//-->
</script>

スクリプトの内容から、あらゆる環境で「右クリック禁止」を実現したいのかと思って……
それに「JavaScriptを勉強中」ということなので、お仕事の方だと考えていませんでした……

できれば、どのような立場で、どのような環境を想定しているのか、
質問内容に書いて下さるとあり難いです。回答の仕方も変わってきますので。

参考:コンテキストメニューを抑止する
http://www.mozilla.gr.jp/standards/webtips1002.html


4:[回答] Masa [2004/12/21 20:15 ]

ありがとうございます。
環境はIE6です。
数十あるファイルを一気に外部JSファイルのみで禁止にしたいのです。
(既にリンクしているJSファイルがあるので)

すでに当方の環境では前述のソースを書いただけで右クリックの禁止は出来ました。
しかし、個人的な好き嫌いもあり、alertがうっとおしいので何とか消したいのです。
(ユーザーさんは納得すると思われますが・・・)
そして、「個人的興味」で、どうしてalertが必須なのか知りたいので、
「勉強中」という表現になったしだいです。

どうぞよろしくお願いいたします。


5:[回答] のの [2004/12/21 23:31 ]

>falseを返せば事足りるような気がするのです
>どうしてalertが必須なのか

質問されたコードのreturn false;は意味がありません。falseを返さなくても右クリック禁止と同じ効果があります。表示されたalertのOKをクリックすることによって、直前の右クリックの効果が消えてしまうからです。

右クリック禁止にしていないページで右クリックしてコンテキストメニューを表示させ、コンテキストメニュー以外のところで左クリックすればコンテキストメニューは消えてしまいますよね。それをalertのOKをクリックさせることで実現させているだけです。

>数十あるファイルを一気に外部JSファイルのみで禁止にしたいのです
私なら>>3で回答がありました
document.oncontextmenu = function() { return false };
を外部JSに組み込みます。

ちなみに、oncontextmenuイベントはonmouseupの時に発生します。
ここでは、事前にonmousedownの段階でalertを表示させてしっています。「小技」というのでしょうか…


6:[回答] Masa [2004/12/22 10:24 ]

>ちなみに、oncontextmenuイベントはonmouseupの時に発生します。
>ここでは、事前にonmousedownの段階でalertを表示させてしっています。「小技」というのでしょうか…

なるほど!もやが晴れたようです。
お二方、どうもありがとうございました。

追伸
 色々調べましたが、最初私が書いたソースはIE以外のブラウザに
 対応しているらしいです。(oncontextmenuがIEにしかない。W3Cにもない)
 ま、今回は、IEオンリーでいきます(^^

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World