2015-01-09 7 views
1

프로그래밍 방식으로 저장 작업의 콜백에서 새 탭을 열려고합니다. 내가 콜백 모든 내에 넣어하지 않는 경우 http://jsfiddle.net/5Lwwmbq8/1/프로그래밍 방식으로 콜백 내에서 새 탭 열기

var atag = document.createElement('a'); 
atag.setAttribute('href', 'https://yahoo.com'); 
atag.setAttribute('target', '_blank'); 
atag.setAttribute('id','clickdamnit'); 
$('#onlydiv').append(atag); 
setTimeout(function() { 
    atag.click(); 
}, 3000); 

에서 매우 차이가 잘 작동합니다. 그러나 콜백의 범위 내에서는 팝업 차단기로 차단됩니다. 이 문제를 해결할 방법이 있습니까?

나는 window.open으로 앵커 태그를 대체 해 보았습니다 - 동일한 결과.

+5

브라우저 그래서 타임 아웃의 구멍을 연기, 사용자 작업에서 시작되지 않은 창문의 개방을 차단 작동하지 않으며 timeOut을 제거하는 것 이외에는 해결 방법이 없습니다. – adeneo

답변

1

중간 페이지 (예 : '/ sameDomainDummySpinnerPage')를 제공 한 다음 콜백에서 리디렉션하여 길을 건너 뛸 수있었습니다.

$('#linktest').click(function(){ 
    var childWindow = window.open('/sameDomainDummySpinnerPage'); 
    setTimeout(function() { 
     childWindow.location.replace('http://yahoo.com'); 
    }, 3000); 
}); 

또 다른 방법은 '대상'속성을 고유 한 문자열로 설정하는 것입니다. 동일한 대상에 대한 콜백 window.open에서 이전에 소개 된 탭에 영향을줍니다. 그러나 이로 인해 사용자 환경이 악화됩니다. 사용자는 스크립트를 연 탭을 사용하여 웹 서핑을 할 수 있습니다. 다시 실행하면 스크립트는 다음을 수행합니다. 1. 대체 탭의 기존 window.location 2. .focus()가 허용되지 않을 수 있습니다. 사용자를 일으키는 그들의 행동의 응답에 밖으로 놓치지

심판 : https://developer.mozilla.org/en-US/docs/Web/API/Window.open#Do_not_use_target.3D.22_blank.22 http://www.infimum.dk/HTML/JSwindows.html Bypass popup blocker on window.open when JQuery event.preventDefault() is set

관련 문제