Chrome, Javascript, window. 새 탭에서 열기


110

크롬에서는 새 탭에서 열립니다.

<button onclick="window.open('newpage.html', '_blank')" />

새 창에서 열립니다 (하지만 새 탭에서도 열리기를 원합니다.

<script language="javascript">
  window.open('newpage.html', '_blank');
</script>

이것이 가능합니까?


2
당신이 확신하는 것에 대해 확신합니까? 두 조각의 결과는 동일합니다.
Denys Séguret 2013

1
창이 탭에서 열리 든 새 창에서 열리 든 로컬 브라우저와 사용자가 브라우저를 구성하는 방법은 자바 스크립트에서 지정할 수있는 것이 아닙니다.
jfriend00 2013-04-04

답변:


150

Internet Explorer 사용자가 제어하는 ​​옵션이므로 직접 제어 할 수 없습니다.

다른 창 이름으로 Window.open을 사용하여 페이지를 열면 팝업과 같은 새 브라우저 창에서 열리거나 사용자가 브라우저를 구성한 경우 새 탭에서 열립니다.

편집하다:

더 자세한 설명 :

1. 최신 브라우저에서 window.open은 팝업이 아닌 새 탭에서 열립니다.

2. 세 번째 매개 변수에 옵션을 지정하여 브라우저가 새 창 ( '팝업')을 사용하도록 강제 할 수 있습니다.

3. window.open 호출이 사용자 시작 이벤트의 일부가 아닌 경우 새 창에서 열립니다.

4. "사용자 시작 이벤트"는 동일한 함수 호출을 필요로하지 않지만 사용자 클릭에 의해 호출 된 함수에서 시작되어야합니다.

5. 사용자가 시작한 이벤트가 함수 호출을 위임하거나 연기하면 (이벤트 리스너에서 또는 클릭 이벤트에 바인딩되지 않은 위임 또는 setTimeout을 사용하여) "사용자 시작됨"상태가 손실됩니다.

6. 일부 팝업 차단기는 사용자가 시작한 이벤트에서 열리는 창을 허용하지만 그렇지 않은 경우에는 열리는 창을 허용하지 않습니다.

7. 팝업이 차단되면 차단기가 일반적으로 허용하는 팝업 (사용자 시작 이벤트를 통해)도 차단되는 경우가 있습니다. 몇 가지 예…

새 탭 대신 새 브라우저 인스턴스에서 창을 강제로 열도록하기 :

window.open('page.php', '', 'width=1000');

다음은 다른 함수를 호출하더라도 사용자가 시작한 이벤트로 한정됩니다.

function o(){
  window.open('page.php');
}
$('button').addEvent('click', o);

다음은 setTimeout이 지연하므로 사용자 시작 이벤트로 간주되지 않습니다.

function g(){
  setTimeout(o, 1);
}
function o(){
  window.open('page.php');
}
$('button').addEvent('click', g);

2
Chrome 및 FF에서 테스트하여 추가하고 싶습니다. "사용자 시작 이벤트"로 정의한 window.open을 사용하면 브라우저 기본 동작이 유지된다는 것을 알았습니다. 즉, Chrome에서 Shift 키를 누른 상태에서 새 브라우저 창을 클릭하면 Ctrl 키를 누르거나 마우스 가운데 버튼을 누르면 새 탭이 백그라운드에서 열립니다. 아주 좋은 것은 앵커 태그를 전체에 배치하지 않고도 몇 가지를 만들 수 있다는 것입니다.
Hoffmann

3
"window.open 호출이 사용자가 시작한 이벤트의 일부가 아니라면 새 창에서 열립니다." 아니요, 거의 확실히 열리지 않습니다.
TJ Crowder

3
2014 년 9 월 29 일부터 최신 Firefox ESR 및 IE 11은 js 호출이 _blank를 창 이름으로 사용할 때 새 창에서 _blank 또는 window.open 링크를 엽니 다. 현재 Chrome은 그렇게 간단하지 않습니다. 위, 왼쪽, 너비, 높이, 도구 모음, 위치, 디렉토리, 상태, 메뉴 막대, 스크롤 막대 및 크기 조정 가능을 통과하는 새 창을 열고 차례로 각 창을 생략하는 테스트를 수행했습니다. Chrome은 상태, 메뉴 바 또는 스크롤바가 생략 된 경우를 제외하고 모두 새 탭에서 열었습니다. 이것은 너무 자의적으로 보이며 믿기 어렵지만 경험적으로 그 일이 일어났습니다. 여기 예 : jsbin.com/mobiyeqojaha/1
enigment

34

사용자가 좋아하는 경우 탭을 강제로 사용하는 것이 때때로 유용합니다. Prakash가 위에서 언급했듯이 이것은 때때로 사용자가 시작하지 않은 이벤트의 사용에 의해 결정되지만 그에 대한 방법이 있습니다.

예를 들면 :

$("#theButton").button().click( function(event) {
   $.post( url, data )
   .always( function( response ) {
      window.open( newurl + response, '_blank' );
   } );
} );

"항상"기능은 사용자가 시작한 것으로 간주되지 않으므로 항상 새 브라우저 창에서 "newurl"을 엽니 다. 그러나 이렇게하면 :

$("#theButton").button().click( function(event) {
   var newtab = window.open( '', '_blank' );
   $.post( url, data )
   .always( function( response ) {
      newtab.location = newurl + response;
   } );
} );

사용자가 시작한 버튼 클릭의 사용자 기본 설정에 따라 새 브라우저 창을 열거 나 새 탭을 만듭니다. 그런 다음 AJAX 게시물에서 돌아온 후 원하는 URL로 위치를 설정합니다. 짜잔, 우리는 사용자가 그것을 좋아한다면 탭 사용을 강요합니다.


window.open의 크롬에 중단 점이 설정되어 있으면 브라우저가 새 창을 엽니 다. 코드가 깨지지 않도록하면 대신 새 탭이 열리는 것 같습니다.
skinnybrit51

window.open 및 함수 결과가 5/6/7 초 정도 걸리지 않는 한 괜찮은 해결 방법입니다. 함수가 10 초가 소요되는 PDF를 생성하는 서버에 데이터를 게시하는지 고려하십시오. 빈 탭에 대한 window.open은 즉시 실행되며 사용자는 마술처럼 채워질 때까지 10 초 동안 빈 탭을 응시합니다. 여전히 iOS에서는 유일한 솔루션입니다.
Kevin Brown


11

현재 (Chrome 39)이 코드를 사용하여 새 탭을 엽니 다.

window.open('http://www.stackoverflow.com', '_blank', 'toolbar=yes, location=yes, status=yes, menubar=yes, scrollbars=yes');

물론 이것은 향후 버전의 Chrome에서 변경 될 수 있습니다.

사용자가 사용하는 브라우저를 제어 할 수없는 경우이 기능을 사용하는 것은 좋지 않습니다. 향후 버전이나 다른 설정에서는 작동하지 않을 수 있습니다.


jfriend00의 의견에 따라 사용자가 브라우저를 구성하는 방식에 따라 코드가 아닌 새 창이 열리는 방식이 결정됩니다.
Lee Taylor

환경을 제어 할 수없는 경우 이러한 솔루션에 의존하는 것은 좋지 않다는 점에 동의합니다. 그러나 이것이 가능한 상황이 있습니다 (예를 들어 자체 휴대용 Chrome과 함께 제공되는 응용 프로그램에서 사용). 이것을 명확히하기 위해 나는 나의 anser를 편집했다.
Nico Wiedemann 2014 년

2
궁금한 사람들을 위해이 오류로 VM646 js:12 Blocked opening 'http://www.stackoverflow.com/' in a new window because the request was made in a sandboxed frame whose 'allow-popups' permission is not set.
인해이

6

그러면 Chrome 및 Firefox의 새 탭에서 링크가 열리고 테스트하지 않은 더 많은 브라우저가 열립니다.

var popup  = $window.open("about:blank", "_blank"); // the about:blank is to please Chrome, and _blank to please Firefox
popup.location = 'newpage.html';

기본적으로 새 빈 탭을 열고 해당 빈 탭의 위치를 ​​설정합니다. 브라우저 탭 / 창 동작은 실제로 브라우저와 사용자의 도메인, 책임 및 선택이기 때문에 일종의 해킹이라는 점에 유의하십시오.

두 번째 줄은 콜백에서 호출 될 수 있지만 (예를 들어 AJAX 요청을 수행 한 후) 브라우저는이를 사용자가 시작한 클릭 이벤트로 인식하지 못해 팝업을 차단할 수 있습니다.


1
$windowAngularJS의 window. window대신 간단히 사용할 수 있습니다 . 추가 정보 : docs.angularjs.org/api/ng/service/$window
Magne


0

이 코드를 사용하여 새 탭에서 열 수 있습니다.

function openWindow( url )
{
  window.open(url, '_blank');
  window.focus();
}

나는 그것을 stackoverflow .. 에서 얻었습니다 .


1
이것은 작동하지만 사용자 클릭 핸들러에있는 경우에만 가능합니다. 그렇지 않으면 새 창이 열립니다 (그러나 Firefox는 사용자가 허용 할 때까지 최소한 차단합니다).
djsmith

@djsmith, 나는 이것을 사용하고 있으며 IE7에서만 문제에 직면하고 있습니다. 당신이 .. 다른 솔루션을 제안 해주십시오 경우 주셔서 감사합니다 ..
딜립 라지 쿠마르을

-2

내가 사용하는 가장 좋은 방법 :

1- html에 링크 추가 :

<a id="linkDynamic" target="_blank" href="#"></a>

2- JS 기능 추가 :

function OpenNewTab(href)
{
    document.getElementById('linkDynamic').href = href;
    document.getElementById('linkDynamic').click();
}

3- 원하는 링크로 OpenNewTab 함수를 호출하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.