W i S T E R I A

B O A R D
 
●新規 ●トレリス表示 ●一覧表示 ●ログ検索 ●ヘルプ ●ホームへ
●選択した記事の表示・返信・修正・削除
別フレームの壁紙を右クリックで切り替える... <95akaw> 01/16 (12:17) 46
 └ Re1:別フレームの壁紙を右クリックで切り替... <ごだっち@管理...> 01/16 (13:06) 48 admin
 └ Re2:別フレームの壁紙を右クリックで切り替... <95akaw> 01/16 (21:49) 49
 └ Re3:別フレームの壁紙を右クリックで切り替... <ごだっち@管理...> 01/17 (17:41) 50 admin
 └ Re4:別フレームの壁紙を右クリックで切り替... <95akaw> 01/20 (18:01) 51
 └ Re5:別フレームの壁紙を右クリックで切り替... <ごだっち@管理...> 01/20 (23:02) 52 admin
 └ Re6:別フレームの壁紙を右クリックで切り替... <95akaw> 01/28 (00:58) 55

50
Re3:別フレームの壁紙を右クリックで切り替える。 by ごだっち@管理人 2004/01/17 (Sat) 17:41
view
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フォルダ内のキャッシュから取り出すことも出来るし、仮に全ての処理を禁止できたとしても、ブラウザ画面上に表示されているからには「スクリーンキャプチャ(表示されているブラウザ画面そのものをコピーする機能:ウィンドウズ標準)」を禁止する手段は基本的に無いです。

pass>>


選択した記事にこのフォームで返信します。
name
url
mail
title
mesage
pass