2009-06-27 8 views
1

다음은 Joomla 용 플러그인의 코드입니다. 그것은 자체적으로 작동하며 페이지의 외부 링크를 감지하여 _blank를 사용하여 새 브라우저 창으로 이동시키는 것이 목적입니다.글로벌 외부 링크 확인 경고에 자바 스크립트 문제가 발생했습니다

약 1 시간 동안 (자바 스크립트를 잘 모르는) 시도했지만 onclick 함수를 작동시키는 방법을 알아낼 수 없습니다.

마지막 결과, 두 번째 코드 섹션에 표시된 확인 대화 상자의 기능을이 스크립트에 추가하려고합니다.

외부 링크를 클릭하면 확인 대화 상자가 나타나고 예라고 표시되면 외부 URL로 이동하여 새 창에서 열 수 있습니다. 그렇지 않으면 취소되고 아무 것도 수행하지 않습니다.

onclick="return ExitNotice(this.href);"
으로 링크를 만들면 완벽하게 작동하지만 내 웹 사이트에 입력을 제출하는 사람이 여러 명 있기 때문에 확인 상자를 전체적으로보고 싶습니다.

this.blankwin = function(){ 
    var hostname = window.location.hostname; 
    hostname = hostname.replace("www.","").toLowerCase(); 
    var a = document.getElementsByTagName("a"); 
    this.check = function(obj){ 
    var href = obj.href.toLowerCase(); 
    return (href.indexOf("http://")!=-1 && href.indexOf(hostname)==-1) ? true : false;    
    }; 
    this.set = function(obj){ 
    obj.target = "_blank"; 
    obj.className = "blank"; 
    };  
    for (var i=0;i<a.length;i++){ 
    if(check(a[i])) set(a[i]); 
    };   
}; 

this.addEvent = function(obj,type,fn){ 
    if(obj.attachEvent){ 
    obj['e'+type+fn] = fn; 
    obj[type+fn] = function(){obj['e'+type+fn](window.event);} 
    obj.attachEvent('on'+type, obj[type+fn]); 
    } else { 
    obj.addEventListener(type,fn,false); 
    }; 
}; 
addEvent(window,"load",blankwin); 

두 번째 부분

/* ---------- 
    OnClick External Link Notice 
---------- */ 
function ExitNotice(link,site,ltext) { 
    if(confirm("-----------------------------------------------------------------------\n\n" + 
    "You're leaving the HelpingTeens.org website. HelpingTeens.org\ndoes not " + 
    "control this site and its privacy policies may differ\nfrom our own. " + 
    "Thank you for using our site.\n\nYou will now access the following link:\n" + 
    "\n" + link + "\n\nPress \'OK\' to proceed, or press \'Cancel\' to remain here." + 
    "\n\n-----------------------------------------------------------------------")) 
    { 
    return true; 
} 
history.go(0); 
return false; 
} 

A)는 그 누구도 날이 문제를 해결하는 데 도움이 수 있습니까? 또는 B) 더 좋은 해결책이 있습니까?

+0

아무도 도움을 드릴 수 있습니까? – OverDrive

+0

이봐 요,이 스레드를 발견하고 꽤 흥미 롭다고 생각합니다. 하지만 슬프게도 가장 중요한 정보가 누락되었습니다. xou - OVerdrive - plese가 Joomla Plugin을 사용하고 있다고 말할 수 있습니까? 나는 같은 것을 필요로하고 조사한 후에 그것을 찾을 수 없었다. .. 고마워. nauck – Nauck

+0

좋아요, 직접 찾았습니다. 플러그인은 MFBLANK라고 불리우며이 링크 아래의 Joomla Extension Repository에서 찾을 수 있습니다. http://extensions.joomla.org/extensions/structure-a-navigation/site-links/4266 작성자 http://Marcofolio.net. 당신은 좋은 HTTP를보고 싶어 ... 여기 http://www.marcofolio.net/downloads/joomla/mfblank_for_j_1.5/details.html 이 좋은 GPL의 Joomla 플러그인 재미 를 참조하십시오 : // 3d.nauck.eu 3D 웹 사이트? 여기를 클릭하십시오. – Nauck

답변

0

그래서 저는 여러분이 묻고있는 내용을 요약해서 어떻게 해결할 수 있을지 생각해 봅니다. 당신의 질문을 오해했을 수도 있습니다.

모든 태그를 통과하고 대상 속성을 "_blank"로 설정하고 className을 "비어 있음"으로 설정 한 코드가 있고 JavaScript 대신 링크를 다시 작성하여 확인 대화 상자를 표시하려고합니다 사용자가 예를 클릭 한 경우에만 해당 위치로 이동하십시오.

<a href="javascript:void(0)" onclick="if (ExitNotice('http://www.whatever.com')) window.location.assign('http://www.whatever.com')"> 

자바 스크립트를 : 나는 그들이과 같이 기록 된 것처럼 당신은 결국 링크를하려는 생각이 경우

은 무효 (0)에 갈 수있는 클릭의 정상적인 브라우저 처리됩니다 다른 페이지, 그래서 귀하의 onclick 실행 시간이 있습니다.

this.set = function(obj){ 
    var href = obj.href; 
    obj.href = "javascript:void(0)"; 
    obj.onclick = function() { (if ExitNotice(href) window.location.assign(href); }; 
    obj.target = "_blank"; 
    obj.className = "blank"; 
    }; 

무효에 대한 정보를 원하시면 here을 참조하십시오 (0) :

는 this.set 이런 일에 (this.blankwin 내부)의 정의를 변경할 수 있습니다,이 일어날 수 있도록합니다.

또한 obj.className을 "blank"로 설정하는 코드는 이미 링크에 할당 된 다른 className을 제거하므로 좋지 않습니다. 다음과 같이 기존 클래스에 클래스 이름을 추가 할 수 있습니다.

obj.className = obj.className + " blank"; 
+0

코드를 시도했는데 작동하지 않고이 줄을 어기는 것 같습니다. obj.onclick = function() {if ExitNotice (href) window.location.assign (href);}; 기존 클래스에 클래스 이름을 추가하기 위해 클래스 이름을 변경했습니다. (자바 프로그래머가 아니기 때문에 정확히 무엇을하는지 모르겠습니다.) 그 라인을 주석 처리하면 알 수 있습니다. – OverDrive

+0

모든것이 내가 원하는대로 작동합니다. 도움을 주셔서 감사합니다. 처음 사용하는 것으로, 나는 당신에게 올바르게 적립되기를 바랍니다. 주석 상자에 코드를 표시하는 방법 (또는 가능한 경우에도)을 파악할 수는 없지만 다른 사람들에게 도움이되도록 최종 코드로 내 자신의 질문에 대답하려고합니다. – OverDrive

0

모든 것이 이제 원하는대로 작동합니다. 도와 줘서 고마워. 이렇게 처음으로 사용하는 것처럼, 나는 당신에게 올바르게 적립되기를 바랍니다. 주석 상자에 코드를 표시하는 방법 (또는 가능한 경우)을 파악할 수 없기 때문에 다른 사람들에게 도움이되도록 최종 코드로 내 자신의 질문에 대답하려고합니다.

다시 한번 내가 원하는대로 작동하도록 수정해야하는 구문을 보여주었습니다.

고맙습니다.

this.set = function(obj){ 
      var href = obj.href; 
      //obj.href = "javascript:void(0)"; 
      obj.onclick = function() { return ExitNotice(href)}; 
      obj.target = "_blank"; 
      obj.className = obj.className + " blank"; 
    }; 
0

최종 코드는 내가 조금 더 코드를 정제. mfblank.js를 다음 내용으로 변경하십시오. 이제는 모든 스크립트가 하나의 파일에만 있고 rel = nofollow가 추가되었습니다. 이 스크립트로 즐거운 시간 되십시오 ...

this.blankwin = function(){ 
    var hostname = window.location.hostname; 
    hostname = hostname.replace("www.","").toLowerCase(); 
    var a = document.getElementsByTagName("a"); 
    this.check = function(obj){ 
    var href = obj.href.toLowerCase(); 
    return (href.indexOf("http://")!=-1 && href.indexOf(hostname)==-1) ? true : false;    
    }; 
    this.set = function(obj){ 
      var href = obj.href; 
      obj.onclick = function(){ if(confirm("Do you wanne leave this page?")) { 
       return true; 
      } 
       history.go(0); 
       return false; 
      }; 
      obj.target = "_blank"; 
      obj.className = obj.className + " blank"; 
      obj.rel = "nofollow"; 
    }; 
    for (var i=0;i<a.length;i++){ 
     if(check(a[i])) set(a[i]); 
    };  
    }; 
    this.addEvent = function(obj,type,fn){ 
     if(obj.attachEvent){ 
      obj['e'+type+fn] = fn; 
      obj[type+fn] = function(){obj['e'+type+fn](window.event);} 
      obj.attachEvent('on'+type, obj[type+fn]); 
     } else { 
      obj.addEventListener(type,fn,false); 
     }; 
    }; 
    addEvent(window,"load",blankwin);