★右クリック封じ(右クリック代替メニュー)★


<body>タグを用いる方法ではIE5以上にはかなり効果あります。NN7(恐らく6.1)でも動作を確認できました。
しかし、それ以前のブラウザを弾くにはJavaScriptを使うしかありません。ただアラートは不快ですし
左クリック→右クリックの技だけは対策できません。ソース閲覧、JSオフやキーコードは対策できますが(笑
そこでアラートの代わりに代替メニューを呼び出す方法を使ってみましょう。これなら左クリック技は効きません。
ただ、ブラウザごとに微妙にタグが違います。
テーブルの部分は外部ファイル化できないのでブラウザを判別してそれぞれの処理をするのは面倒臭そうです。
結局operaは右クリ禁止できないのでそこまでするなら私はブラウザ判別してIE5や6やNN7以外を弾きます(笑


Windows版IE用(5.01以降)代替表示メニュー
<html><head></head>
<body>
<table id=menu1 style="position:absolute;visibility:hidden" border=2 cellspacing=0 cellpadding=5 bgcolor="#ddffff">
<tr><td bgcolor=black><font color=white><b>My Customized Menu</b></font></td></tr>
<tr><td>
<a href="index.html"><b>トップページに戻る</b></a>
<hr noshade>
<a href="#" onClick="window.external.AddFavorite(location.href,'HTMLソースを隠す方法')"><b>お気に入りに追加する<b></a>
<hr noshade>
<a href="#" onClick="window.print();return false;"><b>このページを印刷する</b></a>
<hr noshade>
<a href="#" onClick="window.close()";return false;><b>このウインドウを閉じる</b></a>
</td></tr>
</table>
<script language="JavaScript">
<!--
if(document.getElementById){
var tmenu = document.getElementById("menu1");
}

function orimenu(e){
var x,y;
x = window.event.clientX;
y = window.event.clientY;
if(document.body.clientWidth - x < tmenu.offsetWidth){ //右端過ぎる
//カーソルの位置がメニューの右端になるように
x = document.body.scrollLeft + x - tmenu.offsetWidth;
} else {
x = document.body.scrollLeft + x;
}
if(document.body.clientHeight - y < tmenu.offsetHeight){ //下過ぎる
y = document.body.scrollTop + y - tmenu.offsetHeight;
} else {
y = document.body.scrollTop + y;
}
tmenu.style.left = x;
tmenu.style.top = y;
if(tmenu.style.visibility == "hidden"){
tmenu.style.visibility = "visible";
} else {
tmenu.style.visibility = "hidden";
}
return false;
}

function closecontext(){
tmenu.style.visibility="hidden";
}

document.oncontextmenu=orimenu;
document.onclick=closecontext;
//-->
</script>
</body>
</html>


Mac版IE(5.0以降)用代替表示メニュー
<html><head></head>
<body>
<table id=menu1 style="position:absolute;visibility:hidden" border=2 cellspacing=0 cellpadding=5 bgcolor="#ddffff">
<tr><td bgcolor=black><font color=white><b>My Customized Menu</b></font></td></tr>
<tr><td>
<a href="index.html"><b>トップページに戻る</b></a>
<hr noshade>
<a href="#" onClick="history.back();return false;"><b>前のページに戻る</b></a>
<hr noshade>
<a href="#" onClick="window.close();return false;"><b>ウインドウを閉じる</b></a>
</td></tr>
</table>
<script language="JavaScript">
<!--
if(document.getElementById){
var tmenu = document.getElementById("menu1");
}

function orimenu(e){
var x,y;
x = window.event.clientX;
y = window.event.clientY;

if(document.body.clientWidth - x < tmenu.offsetWidth){ //右端過ぎる
//カーソルの位置がメニューの右端になるように
x = document.body.scrollLeft + x - tmenu.offsetWidth;
} else {
x = document.body.scrollLeft + x;
}
if(document.body.clientHeight - y < tmenu.offsetHeight){ //下過ぎる
y = document.body.scrollTop + y - tmenu.offsetHeight;
} else {
y = document.body.scrollTop + y;
}
tmenu.style.left = x;
tmenu.style.top = y;

if(event.ctrlKey || event.keyCode == 91){
if(tmenu.style.visibility == "hidden"){
tmenu.style.visibility = "visible";
}
} else {
tmenu.style.visibility = "hidden";
}
return false;
}

function closecontext(){
tmenu.style.visibility="hidden";
}

document.onmousedown = orimenu;
document.onkeydown = orimenu;
//-->
</script>
</body>
</html>


ネットスケープ(6.1以降)用代替表示メニュー
<html><head></head>
<body>
<div id="menu1" style="position:absolute;visibility:hidden;">
<table border=2 cellspacing=0 cellpadding=5 bgcolor="#ddffff">
<tr><td bgcolor=black><font color=white><b>My Customized Menu</b></font></td></tr>
<tr><td>
<a href="./index.html"><b>トップページに戻る</b></a>
<hr noshade>
<a href="#" onClick="history.back(); return false;"><b>前のページに戻る</b></a>
</td></tr>
</table>
</div>
<script language="JavaScript">
<!--
var Mac = navigator.userAgent.indexOf("Mac") != -1 ? true : false;

if(document.getElementById){
var tmenu = document.getElementById("menu1");
}

function orimenu(e){
var x,y;
x = e.clientX;
y = e.clientY;


if(window.innerWidth - x < tmenu.offsetWidth){ //右端過ぎる
//カーソルの位置がメニューの右端になるように
x = window.pageXOffset + x - tmenu.offsetWidth;
} else {
x = window.pageXOffset + x;
}
if(window.innerHeight - y < tmenu.offsetHeight){ //下過ぎる
y = window.pageYOffset + y - tmenu.offsetHeight;
} else {
y = window.pageYOffset + y;
}

window.status = x + ":" + y;

//マウスの近くに移動
tmenu.style.left = x;
tmenu.style.top = y;


//隠れていたものを前に出す
tmenu.style.visibility = "visible";

return false;
}

function closecontext(){
tmenu.style.visibility = "hidden";
}

function noctrl(e){
if(Mac){
if(e.which == 85 || e.which == 117){
//Uのキーを押された
alert("ショートカットキーは用いることができません");
}
} else if(e.which == 17){
alert("Ctrlキーは用いることができません");
}
}

document.oncontextmenu = orimenu;
document.onclick = closecontext;
document.onkeydown = noctrl;
//-->
</script>
</body>
</html>


ネットスケープ6用代替表示メニュー
<html><head></head>
<body>
<div id="menu1" style="position:absolute;visibility:hidden;">
<table border=2 cellspacing=0 cellpadding=5 bgcolor="#ddffff">
<tr><td bgcolor=black><font color=white><b>My Customized Menu</b></font></td></tr>
<tr><td>
<a href="./index.html"><b>トップページに戻る</b></a>
<hr noshade>
<a href="#" onClick="window.print();return false;"><b>このページを印刷する</b></a>
<hr noshade>
<a href="#" onClick="history.back();return false;"><b>前のページに戻る</b></a>
</td></tr>
</table>
</div>
<script language="JavaScript">
<!--
if(document.getElementById){
var tmenu = document.getElementById("menu1");
}

function orimenu(e){
var x,y;
x = e.clientX;
y = e.clientY;

if(window.innerWidth - x < tmenu.offsetWidth){ //右端過ぎる
//カーソルの位置がメニューの右端になるように
x = window.pageXOffset + x - tmenu.offsetWidth;
} else {
x = window.pageXOffset + x;
}
if(window.innerHeight - y < tmenu.offsetHeight){ //下過ぎる
y = window.pageYOffset + y - tmenu.offsetHeight;
} else {
y = window.pageYOffset + y;
}


tmenu.style.left = x;
tmenu.style.top = y;

if (e.which == 3 || e.modifiers == 2 || e.ctrlKey || e.which == 85) {
if(tmenu.style.visibility == "hidden"){
tmenu.style.visibility = "visible";
}
//setInterval("checkctrl()",100);
return false;
} else {
tmenu.style.visibility = "hidden";
}
}

function checkctrl(){
document.onmouseup = orimenu;
document.onkeydown = noctrl;
}

function noctrl(e){
//alert(e.modifiers);
if(e.which == 17 || e.which == 85){
alert("Ctrlキーはご利用になれません");
//setInterval("checkctrl()",100);
return false;
}
}

setInterval("checkctrl()",100);

//-->
</script>
</body>
</html>


ネットスケープ4.X用代替表示メニュー
<html><head></head>
<body>
<layer id=menu1 visibility="hide">
<table border=2 cellspacing=0 cellpadding=5 bgcolor="#ddffff">
<tr><td bgcolor=black><font color=white><b>My Customized Menu</b></font></td></tr>
<tr><td>
<a href="index.html"><b>トップページに戻る</b></a>
<hr noshade>
<a href="#" onClick="window.print();return false;"><b>このページを印刷する</b></a>
<hr noshade>
<a href="#" onClick="history.back();return false;"><b>前のページに戻る</b></a>
<hr noshade>
<a href="#" onClick="window.close();return false;"><b>このページを閉じる</b></a>
</td></tr>
</table>
</layer>
<script language="JavaScript">
<!--
var Mac = navigator.userAgent.indexOf("Mac") != -1 ? true : false;

function orimenu(e){
var x,y;
x = e.pageX;
y = e.pageY;

if(window.innerWidth - x < 150){ //右端過ぎる
//カーソルの位置がメニューの右端になるように
x = window.pageXOffset + x - 150;
} else {
x = window.pageXOffset + x;
}
if(window.innerHeight - y < 120){ //下過ぎる
y = window.pageYOffset + y - 120;
} else {
y = window.pageYOffset + y;
}

if(document.menu1.visibility == "hide"){
document.menu1.left = x;
document.menu1.top = y;
}

if(! Mac && e.modifiers == 2){
alert("Ctrlキーは用いることが出来ません");
return false;
} else if (e.which == 3 || e.ctrlKey || e.which == 85 || e.modifiers == 2) {
if(document.menu1.visibility = "hide"){
document.menu1.visibility = "show";
}
return false;
} else {
if(document.menu1.visibility = "show"){
document.menu1.visibility = "hide";
}
}
}

window.captureEvents(Event.MOUSEDOWN | Event.modifiers | Event.KEYDOWN);
window.onmousedown = orimenu;
window.onkeydown = orimenu;

//-->
</script>
</body>
</html>