2016-07-13 3 views
0

제목에서 내 문제를 설명하는 방법을 모르겠으니이 점에 대해 용서해주십시오. 내 웹 사이트를 임의의 페이지로 열었고 등록 단추가 있습니다. 정말 간단하지만 제 경우에는 등록 양식을 다른 탭 (또는 창)에 표시해야합니다. "RederPartial"이 아니며 어떤 종류의 팝업 창이 아니라 합법적 인 새 탭입니다. 문제는 등록이 완료되면 (즉, 새로운 사용자가 생성되었을 때) 내 임의의 페이지에서 탐지 할 수 있기를 원합니다. 어떻게이 정보를 전달할 수 있습니까? 첫 페이지를 다시로드하지 않고두 창 사이의 정보 교환

답변

1

는 두 개의 창은 파일 시스템 API 또는 로컬 저장소를 사용하여, 쿠키, 서버를 통해 (서로 이야기 할 수있는 여러 가지 방법이 있습니다.

Locale Storage은 둘 사이에 이야기하는 가장 쉬운 방법입니다 동일한 도메인에서 온 창이지만 구형 브라우저에서는 지원되지 않습니다. 누군가 등록한 것을 알기 위해 서버에 접속해야하므로 서버 (Ajax // 웹 소켓)를 사용하는 것이 좋습니다.

다음은 임의의 페이지에서 사용할 수있는 다소 간단한 AJAX 솔루션입니다.

(function(){ 
    var formOpened = false; 
    var registered = false; 

    //Change to whatever interaction is needed to open the form 
    $('#registerbutton').on('click', function(){ 
     if (!formOpened){ 
      formOpened = true; 

      //Will try to poll the server every 3 seconds 
      (function pollServer(){ 
       $.ajax({ 
        url: "/ajax/pollregistered", 
        type: "GET", 
        success: function(data) { 
         if (data.registered){ 
          registered = true; 
          //do other stuff here that is needed after registration 
         } 
        }, 
        dataType: "json", 
        complete: setTimeout(function() {if (!registered) pollServer();}, 3000), 
        //will timeout if request takes longer than 2 seconds 
        timeout: 2000, 
       }) 
      })(); 

      //opens the new tab 
      var win = window.open('/registrationform', '_blank'); 
      win.focus(); 
     } 
    }); 
})(); 

방문자의 세션 키를 '/ ajax/pollregistered'액션으로 사용하여 백엔드 코드를 작성하여 방문자가 사이트로 사용자로 등록되었는지 여부와 시간을 확인할 수 있습니다.

로컬 저장소 사용에 신경 쓸 필요가 없다면 서버 대신 저장소를 폴링하고 등록시 등록 페이지를 로컬 저장소에 쓸 수 있습니다. 이것은 서버에 대한 스트레스가 적지 만 고대 브라우저를 사용하는 사용자에게는 효과가 없을 수 있습니다.

새 탭을 여는 방법은 완전히 신뢰할만한 것은 아닙니다. 기술적으로 javascript로 새 탭을 여는 확실한 방법은 없습니다. 그것은 브라우저와 사용자의 선호도에 달려 있습니다. 새로운 탭을 여는 것은 안티 팝업 플러그인을 사용하는 사용자를 차단할 수 있습니다.

그렇다면 디자인을 수정하고 대신 하나의 창으로 작업하는 방법을 찾아 보시기 바랍니다. 자신과 사용자 모두에게 더 나을 것입니다.

+0

대단히 감사합니다. 나는 그것이 최적이 아니라는 것을 안다. 그러나 나는 다른 방법을 생각하지 않는다. 어쩌면 IFrame을 사용합니까? 것은 그 사용자가 recepies를 만들 수있는 그것의 웹 사이트이고, 나는 조리법을 만든 후에 \ 등록을 등록 할 수 있기를 원한다. 또한 crossdomain 리디렉션이 필요한 페이스 북과 같은 외부 서비스를 통해 \ login을 등록하도록합니다. 그리고 사용자가 아약스를 통해 업로드하는 이미지가 있고 페이 스북 벽에 레시피가 너무나 공개되어 게시하기 전에 등록해야하므로 레시피 양식 만들기 데이터를 작성하는 것은 까다로운 작업입니다. – user3198994