2013-09-23 3 views
-1

나는 asp.net 응용 프로그램에 클릭하여 창을 여는 링크가있는 응용 프로그램이 있습니다.클릭 할 때마다 링크를위한 새 창 열기

예 :
< A HREF = "URL"onclick을 = "window.open (URL, 이름, 매개 변수)">

이 잘 작동합니다. 필요에 따라 창을 엽니 다. 내가 원하는 것은 응용 프로그램이 링크를 클릭하고 별도의 창에서 여러 번 창을 여는 것입니다.

첫 번째 클릭하면 첫 번째 창이 열립니다.
두 번째 클릭하면 동일한 링크의 두 번째 창이 열립니다.
세 번째 클릭하면 같은 링크의 세 번째 창이 열립니다.

동일한 링크의 최대 5 개의 창을 클릭당 하나의 창으로 열어 보겠습니다. 가능하면 어떻게해야합니까?

+0

왜 유용성의 관점에서 이것을하고 싶습니까? 나는 사용자가이 일에 짜증을 내지 않을 경우를 볼 수 없다. – Tim

+0

@Tim. 고객의 요구 사항이었습니다. 그들은 언제든지 열 수있는 창 수를 제한하려고했습니다. – ConfusedDiva

답변

0

링크가있는 목록이 있으니 참조하십시오. 클릭 할 때마다 목록에서 링크를 찾으려고 시도하십시오. 링크가 목록에 없으면 개수가 1 인 목록에 추가하십시오.

<a href="url" onclick="openWindow(url, name, parameters)"> 

    <script> 
    var countLinkPair = []; 

    function openWindow(url, name, parameters) 
    { 
     var flag = false; 
     for (var i = 0; i < countLinkPair.length; i++) { 
      var obj = countLinkPair[i]; 
      if (obj.link == url) { 
       if (obj.count<=5) { 
        window.open(url, name, parameters); 
       } 
       obj.count++; 
       flag = true; 
       break; 
      } 
     } 

     if (!flag) { 
      countLinkPair.push({link:url, count:1}); 
     } 
    } 
    </script> 
1

어렵지 않습니다. 창 중 하나를 닫으면 카운트를 업데이트 할 수 있도록 창을 계속 추적해야합니다.

쉬운 방법 : 상태를 폴링합니다 (이벤트 기반 추적은 악몽입니다).

<script> 
var openWindows = {}; 
var openWindow = function (url, name, specs) { 
    var count = openWindows[name] || 0; 
    if (count < 5) { 
     var w = window.open(url, name + count, specs); 
     var interval = setInterval(function() { 
      if(!w || w.closed){ 
       clearInterval(interval); 
       openWindows[name] = openWindows[name] - 1; 
       console.log('Closed a window for button ' + name); 
      } 
     }, 100); 
     openWindows[name] = count + 1; 
    } 
    console.log('Opened a window for button ' + name); 
}; 
</script> 
<!-- Usage --> 
<input id="btn" name="btn" type="button" onclick="openWindow('http://www.google.it', 'google', 'width=200,height=100');" /> 

이 스크립트는 기본적으로 사용자가 제공 한 이름을 저장 (그렇지 않으면 팝업이 겹치는 것)이 고유하게 만들기 위해 그것을 변경하고 윈도우 객체가 더 이상 없을 때 100msec가 모든를 확인하고 정지하는 시간 초과 설문 조사를 시작하거나 창이 닫힙니다. 좀 더 명확하게하기 위해 콘솔 스팸을 추가했습니다.

중요 카운팅은 페이지를 새로 고침해도 지속됩니다. 이는 안전하게 서버 측에서만 처리 할 수있는 문제입니다.