2014-02-25 2 views
0

여러 링크가있는 HTML 페이지가 있습니다. 링크를 여는 이벤트를 잡을 수있는 능력이 있습니까? 사용자는 링크를 클릭하거나 마우스 오른쪽 버튼으로 새 창이나 탭에서 링크를 열 수 있습니다.링크 열기를 어떻게 알 수 있습니까?

링크는 외부 리소스를 참조하며 해당 콘텐츠를 제어 할 수 없습니다.

답변

3

, 내가 생각할 수있는 몇 가지 클라이언트 측 옵션이있다 ... 그런 짓을하는 자바 스크립트를 사용할 수 없음 이상적인 그 중 :

  • 당신은 할 수 링크의 href을 원하는 코드를 실행 한 javascript: URL로 바꾼 다음 올바른 URL (location.href = "http://example.com")로 이동하십시오. 사용자가 마우스 오른쪽 버튼을 클릭하거나 새 탭을 클릭하거나 자바 스크립트가 비활성화 된 경우 깨지기 때문에 불쾌합니다.

  • <a>의 클릭 이벤트에 이벤트 수신기를 추가 할 수 있습니다. 그러나이 작업은 오른쪽 클릭 -> 열림 또는 사용자가 탭 오버하고 Enter 키를 눌러 트리거되지 않습니다.

  • 문서 자체에서 onunload 이벤트 처리기를 사용할 수 있지만 사용자가 어디로 가고 있는지 알려주지 않으며 사용자가 새 탭을 열면 작동하지 않습니다.

사용자가 탐색하는 위치 만 추적하려는 경우 서버 측 솔루션 만 사용할 수 있습니다. 사용자를 자신의 서버로 보내면 브라우저가 올바른 URL로 리디렉션되도록 HTTP 302 코드를 보냅니다. 물론 이것은 필요한 것보다 더 많은 인프라를 필요로합니다.

+0

감사합니다. 나는 나의 일을 묘사하려고 노력할 것이다. 나는 서버에서 생성 한 여러 링크가있는 페이지가 있습니다. 사용자는 새 탭에서이 링크 중 일부를 열어보고 싶어합니다 (중요합니다 - 현재 페이지 상태를 잃고 싶지 않음). 사용자가 연 링크는 숨겨져 있어야합니다. 올바르게 이해하면 첫 번째와 두 번째 옵션은 '새 탭'에서 작동하지 않으므로 사용할 수 없습니다. 사용자가 새 탭에서 링크를 열고 현재 페이지를 열어두기 때문에 세 번째 옵션을 사용할 수 없습니다. 내 작업을 해결할 다른 방법이있을 수 있습니까? 흠 ... 내가 CSS를 사용하고 내 페이지의 모든 방문 링크를 숨길 수 있습니다 .... – demas

+1

예, 'a : visited {display : none; }'. 이것은 여러 세션에서 지속될 수 있습니다. 원하지 않을 수도 있습니다. 또한,': visited'를 확인하는 것이 (약간 어색한) 사용자의 역사를 발견하는 방법이기 때문에 다른 브라우저의 개인 정보 보호 모드가 어떻게 영향을 줄지 확신하지 못합니다. – Nevett

0

그래 당신은

$('a').click(function(){ 
    event.preventDefault(); 
    $(this).alert("do something"); 
}); 
+0

상황에 맞는 메뉴를 마우스 오른쪽 버튼으로 클릭하고 링크를 열 때 작동합니까? – demas

+0

마크 다운을 주셔서 감사합니다 ... 누가 그렇게되었습니다. 당신은 당신을 바꿀 수 있습니다. 그리고 나는 그것이 오른쪽 클릭을 위해 작동한다고 믿습니다. – Brent

+0

@jibsales, jQuery는 문제가되지 않습니다. – demas

0

var links = document.getElementsByTagName('a'); 
for(var i = 0; i< links.length; i++) { 
    links[i].onmousedown = function(e) { 
    console.log(this.href, this) 
    if ((e.which && e.which == 3) || (e.button && e.button == 2)) { // not sure about IE 
     alert('right click'); 
    } 
    } 
} 
+0

링크를 마우스 오른쪽 버튼으로 클릭하고 새 페이지 또는 탭에서 열지는 않을 것이라고 경고합니다. 맞아 ? – demas

+0

@demas 예,하지만 기본 컨텍스트 메뉴를 열 수 없으며 사용자 정의 컨텍스트 메뉴를 만들 수 있습니다. – ketan

관련 문제