1

私はMVCで作業しており、ポップアップウィンドウを使用してログインシステムを実装できるようにしたいと考えています。

私が立ち往生しているのは、ポップアップウィンドウでログインが成功すると、ログインを閉じる必要があり、メインページでリダイレクトが発生する必要があるということです。JQueryでスコープの問題が大量に発生しているため、これを達成するのに苦労しています。

これでポップアップウィンドウを作成します:

window.open('@Url.Action("Login", "User", null, "http")', 'Login', 'height=500,width=300');

上記のコードの前var window =に追加して、ログインが成功したときに閉じたいウィンドウを参照できるようにすると便利ですが、その変数はログインウィンドウの範囲外です。

@{
  ViewBag.Title = "Login";
}

<h2>Login</h2>

<p id="login-fail" style="display:none">Incorrect username/password</p>

@using (Html.BeginForm()) {
  @Html.LabelFor(x => x.Email, new { id = "txt-email" })
  @Html.TextBoxFor(x => x.Email)
  <br />
  <label for="txt-password">Password</label>
  <input id="txt-password" type="password" />
  <input type="submit" value="Login" />
}


<script type="text/javascript">
  $(function () {
    var success = '@Model.Success';
    if (success == "True") {
      loginSuccess(this.window);
    }
    var failed = '@Model.Failed';
    if (failed == "True") {
      $("#login-fail").show();
    }
  });
</script>

フォームが投稿されたときに部分ビューを更新し、ページが読み込まれたときにJqueryが成功を確認します。成功したら、現在のウィンドウをloginSuccessというjs関数に渡そうとします。

function loginSuccess(elem) { // successful login has occurred
  elem.close();
  window.location = //getRedirect;
}

これまでのところ、ポップアップウィンドウを閉じることができないため、リダイレクトを設定するときにメインウィンドウにフォーカスする必要があります。

メインウィンドウとポップアップの両方が各参照を表示する関数と呼ばれるJavaScriptファイルがあります。ただし、ポップアップウィンドウを作成するjsは関数ファイルになく、ウィンドウ変数はどちらのウィンドウでも使用できません。

簡単に言えば、LinkedInのログインプロセスをモックしようとしているので、ポップアップウィンドウを作成するコードは、を呼び出すことによって呼び出されますIN.UI.Authorize().place();。これは、モックのLinkedInを使用する場合でも、本物。

特にポップアップウィンドウを何らかの方法で参照してから、リダイレクトのためにメインウィンドウに再度フォーカスするなど、これに関するサポートをいただければ幸いです。

4

2 に答える 2

1

window.top関数を使用する必要があるように私には聞こえます:

http://www.w3schools.com/jsref/prop_win_top.asp

于 2013-01-29T11:10:27.297 に答える
0

functions js fileメインページのファイルが子ページを参照できる可能性があるため、両方のページから自分を参照すると問題が発生することがわかりましたjsが、子ページのjsファイルなどによると、これはnullになります。

window.opener親ウィンドウにアタッチされた関数を呼び出すことで、問題の解決に役立ちました。

<script type="text/javascript">
  $(function () {
    var success = '@Model.Success';
    if (success == "True") {
      window.opener.loginSuccess(window);
    }
    var failed = '@Model.Failed';
    if (failed == "True") {
      $("#login-fail").show();
    }
  });
</script>

ポップアップが閉じ、メインページでリダイレクトが発生します。

于 2013-01-29T13:06:30.933 に答える