복붙노트

[JQUERY] window.open에 바이 패스 팝업 차단기 JQuery와에서는 event.preventDefault ()가 집합입니다

JQUERY

window.open에 바이 패스 팝업 차단기 JQuery와에서는 event.preventDefault ()가 집합입니다

해결법


  1. 1.(클릭 등) 사용자 이벤트를 처리하는 동안 사용 된 경우 팝업 차단제는 일반적으로 만 window.open 수 있습니다. $ .getJSON 비동기이기 때문에 귀하의 경우에, 당신은 아닌 이벤트 기간 동안, 나중에 window.open 호출하고 있습니다.

    (클릭 등) 사용자 이벤트를 처리하는 동안 사용 된 경우 팝업 차단제는 일반적으로 만 window.open 수 있습니다. $ .getJSON 비동기이기 때문에 귀하의 경우에, 당신은 아닌 이벤트 기간 동안, 나중에 window.open 호출하고 있습니다.

    당신은 두 가지 옵션이 있습니다 :


  2. 2.당신은 사용자가 직접 일부 조치를 수행하는 경우에만 차단 브라우저없이 window.open 호출 할 수 있습니다. 브라우저는 사용자의 작용에 의해 열이 창을 몇 가지 플래그를 전송하고 결정합니다.

    당신은 사용자가 직접 일부 조치를 수행하는 경우에만 차단 브라우저없이 window.open 호출 할 수 있습니다. 브라우저는 사용자의 작용에 의해 열이 창을 몇 가지 플래그를 전송하고 결정합니다.

    그래서, 당신은이 시나리오를 시도 할 수 있습니다 :


  3. 3.나는이 문제를 가지고 난 일부 데이터를 반환 내 URL을 준비 전까지 콜백이 없었다. 이 솔루션은 콜백을 시작하기 전에 열려 빈 창으로 한 후 바로 그 때 콜백 반환 위치를 설정합니다.

    나는이 문제를 가지고 난 일부 데이터를 반환 내 URL을 준비 전까지 콜백이 없었다. 이 솔루션은 콜백을 시작하기 전에 열려 빈 창으로 한 후 바로 그 때 콜백 반환 위치를 설정합니다.

    $scope.testCode = function () {
        var newWin = $window.open('', '_blank');
        service.testCode().then(function (data) {
            $scope.testing = true;
            newWin.location = '/Tests/' + data.url.replace(/["]/g, "");
        });
    };
    

  4. 4.그것은 나를 위해 작동이 시도

    그것은 나를 위해 작동이 시도

    $('#myButton').click(function () {
        var redirectWindow = window.open('http://google.com', '_blank');
        $.ajax({
            type: 'POST',
            url: '/echo/json/',
            success: function (data) {
                redirectWindow.location;
            }
        });
    });
    

    이를 위해 바이올린인가 http://jsfiddle.net/safeeronline/70kdacL4/1/


  5. 5.윈도우는 예를 들어, 사용자가 시작한 이벤트와 동일한 스택 (일명 microtask)에 작성해야합니다 콜백을 클릭 - 그들은 나중에 생성 할 수 없습니다, 그래서 비동기.

    윈도우는 예를 들어, 사용자가 시작한 이벤트와 동일한 스택 (일명 microtask)에 작성해야합니다 콜백을 클릭 - 그들은 나중에 생성 할 수 없습니다, 그래서 비동기.

    그러나, 당신은 URL없이 창을 만들 수 있으며 심지어 비동기, 그것을 알고 나면 당신은 그 창의 URL을 변경할 수 있습니다!

    window.onclick = () => {
      // You MUST create the window on the same event
      // tick/stack as the user-initiated event (e.g. click callback)
      const googleWindow = window.open();
    
      // Do your async work
      fakeAjax(response => {
        // Change the URL of the window you created once you
        // know what the full URL is!
        googleWindow.location.replace(`https://google.com?q=${response}`);
      });
    };
    
    function fakeAjax(callback) {
      setTimeout(() => {
        callback('example');
      }, 1000);
    }
    

    현대 브라우저 (자주에 대한 전화 : 빈) 빈 페이지와 함께 창이 열립니다하고 URL을 얻으려면 비동기 작업을 가정하는 것은 빠르고, 결과 UX는 대부분 괜찮 상당히이다. 대신 사용자가 대기하는 동안 창에 로딩 메시지 (또는 무엇이든) 렌더링하려는 경우, 당신은 데이터 URI를 사용할 수 있습니다.

    window.open('data:text/html,<h1>Loading...<%2Fh1>');
    

  6. 6.이 코드 도움 나. 이 도움말을 희망 어떤 사람들

    이 코드 도움 나. 이 도움말을 희망 어떤 사람들

    $('formSelector').submit( function( event ) {
    
        event.preventDefault();
    
        var newWindow = window.open('', '_blank', 'width=750,height=500');
    
        $.ajax({
    
            url: ajaxurl,
            type: "POST",
            data: { data },
    
        }).done( function( response ) {
    
            if ( ! response ) newWindow.close();
            else newWindow.location = '/url';
    
        });
    });
    

  7. 7.하는 A 링크 요소를 사용하여 시도하고 자바 스크립트로를 클릭

    하는 A 링크 요소를 사용하여 시도하고 자바 스크립트로를 클릭

    <a id="SimulateOpenLink" href="#" target="_blank" rel="noopener noreferrer"></a>
    

    하고 스크립트

    function openURL(url) {
        document.getElementById("SimulateOpenLink").href = url
        document.getElementById("SimulateOpenLink").click()
    }
    

    이처럼 사용

    //do stuff
    var id = 123123141;
    openURL("/api/user/" + id + "/print") //this open webpage bypassing pop-up blocker
    openURL("https://www.google.com") //Another link
    

  8. 8.이벤트가 사용자에 의해 시작되어야했다는 것을 관찰이의 첫 부분을 파악하는 것을 도와주었습니다 만, 심지어 그 후 크롬과 파이어 폭스는 여전히 새 창을 막았다. 두 번째 부분은 하나의 주석에 언급 된 링크에 = "_ 빈"대상을 추가 하였다.

    이벤트가 사용자에 의해 시작되어야했다는 것을 관찰이의 첫 부분을 파악하는 것을 도와주었습니다 만, 심지어 그 후 크롬과 파이어 폭스는 여전히 새 창을 막았다. 두 번째 부분은 하나의 주석에 언급 된 링크에 = "_ 빈"대상을 추가 하였다.

    요약 : 당신은 링크이 경우 클릭에, 사용자에 의해 시작된 이벤트에서 window.open 호출해야하고, 그 링크 = "_ 빈"대상이 있어야합니다.

    링크 아래의 예에서 클래스 = "버튼 트위터"를 사용하고 있습니다.

    $('.button-twitter').click(function(e) {
      e.preventDefault();
      var href = $(this).attr('href');
      var tweet_popup = window.open(href, 'tweet_popup', 'width=500,height=300');
    });
    

  9. 9.

    var url = window.open("", "_blank");
    url.location = "url";
    

    이 날 위해 일했습니다.


  10. 10.내 반작용 코드에서 팝업 차단을 방지하기 위해이 방법을 사용하고 있습니다. 그것은 또한 다른 모든 자바 스크립트 코드에서 작동합니다.

    내 반작용 코드에서 팝업 차단을 방지하기 위해이 방법을 사용하고 있습니다. 그것은 또한 다른 모든 자바 스크립트 코드에서 작동합니다.

    당신은 클릭 이벤트에 비동기 호출을 할 때, 단지 첫 번째 빈 창을 열고 비동기 호출이 완료되면 다음 나중에에 URL을 작성합니다.

    const popupWindow = window.open("", "_blank");
    popupWindow.document.write("<div>Loading, Plesae wait...</div>")
    

    비동기 호출의 성공에, 다음 쓰기

    popupWindow.document.write(resonse.url)
    
  11. from https://stackoverflow.com/questions/9514698/bypass-popup-blocker-on-window-open-when-jquery-event-preventdefault-is-set by cc-by-sa and MIT license