2016-07-13 12 views
0

タイトルで私の問題を説明する方法がわからないので、これを許してください。私はいくつかのランダムなページで私のウェブサイトを開いたと言うと、私は登録ボタンがあります。本当にシンプルですが、私の場合は、登録フォームを別のタブ(またはウィンドウ)に表示する必要があります。 "RederPartial"ではなく、ある種のポップアップウィンドウ、正当な新しいタブ。問題は、登録が完了したとき(つまり、新しいユーザーが作成されたとき)、私のランダムなページから検出できるようにしたいということです。この情報をどのように渡すことができますか?最初のページをリロードせずに2つのウィンドウ間の情報交換

答えて

1

2つのウィンドウは、ファイルシステムAPIやローカルストレージを使用して、クッキーで、サーバーを介して(お互いに話を作るための様々な方法があります。

Locale Storageは、両者の間に話をするこれまで最も簡単な方法であります同じドメインから来たウィンドウですが、古いブラウザではサポートされていません。誰かがいつ登録したかを知るためにサーバーに連絡する必要があるので、サーバー(Ajax // Webソケット)を使用することをお勧めします。

ここではあなたのランダムなページで使うことができるややシンプルな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で新しいタブを開く確実な方法はありません。それはブラウザとユーザーの好みによって異なります。新しいタブを開くと、アンチポップアッププラグインを使用しているユーザーがブロックされることがあります。

あなたのデザインを改訂し、代わりに1つのウィンドウで作業する方法を見つけることを強くお勧めします。おそらくあなた自身とあなたのユーザーの両方にとっては良いでしょう。

+0

非常に助けてくれてありがとう!私はそれが最適ではないことを知っていますが、私はそれ以外の方法を考えることはできません。たぶん、IFrameを使用する?物事は、ユーザーがレシピを作成できるウェブサイトであり、レシピを作成した後に\サインインを登録できるようにしたい。また、クロスドメインのリダイレクトを必要とするfacebookなどの外部サービスを介して\ loginを登録したいと思っています。そして、レシピ作成フォームデータを編集することは、ユーザーがajaxを使ってアップロードしたイメージがあり、レシピがFacebookの壁面に不安定に公開され、公開前に登録する必要があるために面倒です – user3198994

関連する問題