 |
50
 |
Re3:別フレームの壁紙を右クリックで切り替える。 by ごだっち@管理人 |
2004/01/17 (Sat) 17:41 |
|
|
admin |
http://homepage2.nifty.com/godakaz/laboratory/040117/
とりあえず、こんな感じの動作が出来れば良いのかな?
上のページのスクリプトは、以下の通り。
<script type="text/javascript"> <!-- function rld(){ window.self.location.reload(); } function rl(){ setTimeout("rld()",500); } function al(){ // window.alert(); window.top.b.document.body.style.backgroundImage = "url(b.gif)"; return false; } window.onerror = rl; window.top.b.document.body.oncontextmenu = al; //--> </script>
まず、最後の window.on〜系の2行について説明する。 最初の window.onerror = rl; は、このページを読み込む際にエラーが生じたら、このページを再読み込みするための関数を呼んでいる。 これは、このページを読み込むタイミングによってはまだ下のフレームが読み込み終わっていないため、次の行で指示している window.top.b.document.body が存在していない。 このため、その存在しないオブジェクトに対する oncontextmenu イベントを条件として指定しても「オブジェクトが存在しない」というエラーが発生してしまう。 これを避けるには、下のフレームが読み込み終わるのを待って上のフレームを読み込み始めれば良いのだが、今回の条件として下のフレームには手を加えないという指定があるため、上のフレーム側で処理を完了しなければならない。 それゆえ、上のフレーム側ではエラーを検出したら、0.5秒後に再読み込みを行うように設定した。
次に、window.top.b.document.body.oncontextmenu = al; だが、これは下のフレーム(ウィンドウ名を b としている)の画面内で右クリックが行われた場合に、al という名前で定義しておいた関数を呼んでいる。
そして、function al() では、下のフレームの背景を b.gif に入れ替えるのと、右クリック操作に対して何も反応しない(return false;)という処理を行っている。
ただ、今回のスクリプトで画像の保存を回避しようとしても、Netscapeなどの 「IE以外のブラウザ」には効果が無いし、そもそも「ファイル」メニューから「名前を付けて保存」すれば、画面に表示されているデータは全て好きな場所に保存できるし、Tempフォルダ内のキャッシュから取り出すことも出来るし、仮に全ての処理を禁止できたとしても、ブラウザ画面上に表示されているからには「スクリーンキャプチャ(表示されているブラウザ画面そのものをコピーする機能:ウィンドウズ標準)」を禁止する手段は基本的に無いです。
|
|
 |
選択した記事にこのフォームで返信します。
|