때에 따라 SHIFT, CTRL, ALT 키를 막아야할 경우가 있다. SHIFT, CTRL, ALT 키를 흔히 모디파이어(modifier)라고 부르는데 인터넷 익스플로러에서는 각각의 모디파이어에 대한 다음과 같은 불린(boolean) 속성을 갖고 있다.

event.shiftKey
event.altKey
event.ctrlKey
다른 키보드와 함께 이 SHIFT, CTRL, ALT키가 눌려졌는지 체크하려면 위에 언급한 속성들이 true인지를 체크만 하면 된다. 위의 예는 인터넷 익스플로러의 예이다. 넷스케이프에서는 modifiers란 하나의 속성에서 이 값들을 관리한다. 넷스케이프에는 Event 객체에 이와 관련한 다음과 같은 상수 값을 가지고 있다.

SHIFT_MASK
ALT_MASK
CONTROL_MASK
META_MASK
만일 넷스케이프에서 다른 키보드와 이 SHIFT, CTRL, ALT키가 눌려졌는지 체크하려면 비트와이즈(bitwise) AND 연산자를 사용하여 알아내면 된다. 예를 들어 ALT 키가 눌려졌는지 체크하려면 다음과 같이 하면 된다.

e.modifiers & Event.ALT_MASK
실제 예를 살펴보자.

<BODY ... onKeyPress="handlePress(event)">
<SCRIPT LANGUAGE="JavaScript">
<!--
function handlePress(e) {
  var shiftPressed = (window.Event) ? e.modifiers & Event.SHIFT_MASK : e.shiftKey
  if (shiftPressed) {
    alert("현재 페이지에서 SHIFT키는 사용할 수 없습니다!");
        return false;
  }
  else return true;
}
// -->
</SCRIPT>
...
...
</BODY>
 

위의 소스 코드에서 인터넷 익스플로러와 넷스케이프를 구분하는 코드는 '(window.Event) ?' 부분이다. 이 값이 참이면 넷스케이프이고 거짓이면 인터넷 익스플로러로 간주한다.

다른 ALT키와 CTRL키도 위와 같은 방법으로 잡아낼 수가 있다.
2007/11/22 15:17 2007/11/22 15:17
퀵메뉴 관련소스 중에 비교적 간단해서 자주 애용하는 소스입니다. (중복일지도;;)
근데 아쉽게도 파폭에선 안되네요... 그동안 잘 안 쓴 이유도 그때문인데 그럼에도 불구하고 오늘 어떤 사이트에 적용했다가 (찾아보니 다른건 거의 플래시용이라) 팁으로도 올립니다.

그누에 적용하시려면 아래 소스를 따로 /g4/js/qmenu.js 등의 이름으로 저장한 다음
head.sub.php에서

<script language="javascript" src="<?=$g4['path']?>/js/common.js"></script>
<script language="javascript" src="<?=$g4['path']?>/js/ajax.js"></script>
<script language="javascript" src="<?=$g4['path']?>/js/qmenu.js"></script>
<body topmargin="0" leftmargin="0" <?=isset($g4['body_script']) ? $g4['body_script'] : "";?>>
<a name="g4_head"></a>

이런 식으로 추가해주면 됩니다.


///////////////여기부터 퀵메뉴 소스
document.write('<div id=floater style=\"position:absolute; left:1000px; top:300px; z-index:100;\">');
document.write('<a href=\"#g4_head\" onfocus="this.blur()">Top</a><br>');
document.write('<a href=\"javascript:history.go(-1)\" onfocus="this.blur()">Back</a></div>');

self.onError=null;
currentX = currentY = 0; 
whichIt = null;         
lastScrollX = 0; lastScrollY = 0;
NS = (document.layers) ? 1 : 0;
IE = (document.all) ? 1: 0;
<!-- STALKER CODE -->
function heartBeat() {
if(IE) {
  diffY = document.body.scrollTop;
    diffX = 0;
      }
    if(NS) { diffY = self.pageYOffset; diffX = self.pageXOffset; }
if(diffY != lastScrollY) {
                percent = .1 * (diffY - lastScrollY);
                if(percent > 0) percent = Math.ceil(percent);
                else percent = Math.floor(percent);
if(IE) document.all.floater.style.pixelTop += percent;
if(NS) document.floater.top += percent;
                lastScrollY = lastScrollY + percent;
    }
if(diffX != lastScrollX) {
percent = .1 * (diffX - lastScrollX);
if(percent > 0) percent = Math.ceil(percent);
else percent = Math.floor(percent);
if(IE) document.all.floater.style.pixelLeft += percent;
if(NS) document.floater.top += percent;
lastScrollY = lastScrollY + percent;
}
}
if(NS || IE) action = window.setInterval("heartBeat()",1);
////////////여기까지
2007/11/22 15:16 2007/11/22 15:16
//링크클릭시 나타나는 점선 없애주기
function autoblur() {
        if(event.srcElement.tagName == "A") document.body.focus();
}
document.onfocusin = autoblur;


g4/js/common.js 맨아래에  위의 내용을 추가해줍니다.
(익스플로러에서만 되내요)
2007/11/22 15:15 2007/11/22 15:15
프레임을 쓰실때 생각할 것 세가지
1. frame_name.location = 'url.php';
또는 frame_name.location.href = 'url.php';
또는 frame_name.location.replace('url.php')
2. parent.frame_name.location = 'url.php';
3. opener.parent.frame_name.location = 'url.php';

새창을 열게해준 창의 주소를 바꾸고 새창을 끈다.
<script>
opener.location.href = 'url.php';
self.close();
</script>

새창을 열게해준 창의 주소를 새로고침하고 새창을 끈다
<script>
opener.location.reload();
self.close();
</script>

다른 프래임의 주소를 바꾸게 하려면
<script>
frame_name.location.href = 'url.php';
</script>

프래임 구조상 상위 프래임의 주소를 바꾸게 하려면
<script>
parent.location.href = 'url.php';
</script>

타겟이 지정된 프레임을 바꾼다.(타겟하나)
<script>
parent.target(타겟).location.href = 'url.php';
</script>

타겟이 지정된 프레임을 바꾼다.(타겟둘)
<script>
parent.target1(타겟1).location.href = 'url1.php';
parent.target2(타겟2).location.href = 'url2.php';
</script>

타겟이 지정된 프레임을 바꾼다.(타겟셋)
<script>
parent.target1(타겟1).location.href = 'url1.php';
parent.target2(타겟2).location.href = 'url2.php';
parent.target3(타겟3).location.href = 'url3.php';
</script>

타겟이 지정된 프레임두개를 클릭으로 바꾸려면
<script>
function target_frame(url1, url2)
{
parent.top_frame.location.href = url1;
parent.main_frame.location.href = url2;
}
</script>
<a href="javascript:target_frame('main_menu.html', '$go_url');"> 확인 </a>

로그인페이지 에선
<script>
parent.top_frame.location.href = '../main.html'; //main.html는 로그인페이지 보다 상위디렉토리에 있다.
parent.main_frame.location.href = '$go_url';
</script>

로그인페이지를 새창으로 띄웠다면
<script>
opener.parent.top_frame.location.href = '../main.html';
opener.parent.main_frame.location.href = '$go_url';
self.close();
</script>


[펌] http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=5317&sfl=&stx=&sst=wr_hit&sod=desc&sop=and&page=36
2007/11/22 15:15 2007/11/22 15:15