簡體   English   中英

JavaScript彈出窗口阻止程序和Ajax回調-C#MVC應用

[英]javascript popup blocker and ajax callback - C# MVC app

在將表單發布到url的安全網站中,有兩個要求:

  1. 該表格將被張貼到一個新的窗口,如果身份驗證票證仍然有效,否則同一窗口將用戶重定向到登錄頁面。
  2. 將表單發布到新窗口將不會調用彈出窗口阻止程序。

我已經盡力編寫一個ajax操作來獲取關於auth是否仍然有效的正確答案。 但是我無法使重定向代碼超出腳本執行上下文的范圍,因此避免了彈出窗口阻止程序 請幫忙!

JavaScript:

    $('#someSystem').click(function () {
        //deferred promise?
        auth().done(function (result) {
            //need to move below code outside this callback without side effects
            if (result == 'true') {
                var form = $('#ssoForm');
                form.submit();
            }
            else {
                window.location.href = "/account/login";
            }
        });
        return false;
    });

    function auth() {
        return $.ajax({ url: '/account/isauthenticated', method: "POST" });
    }

已驗證用戶的HTML

<form action="/sso/somesystem" id="ssoForm" method="post" target="_blank">
    ...
    <div id="someSystem">Continue</div>
</form>

我認為您除了調整彈出框來避免出現這種情況外,將無能為力。 如果js能夠做到這一點,它將幾乎完全破壞了阻止程序的目的。 您還應該考慮在js中進行重定向的安全性,因為代碼在用戶空間中。 用戶可以從他們的瀏覽器中取消重定向。

相反,為什么不對服務器進行檢查並使用

 RedirectToAction() 

在閱讀了幾篇jQuery文章甚至是SignalR之后, 這篇codeproject.com文章對我的案例來說是最有用的。 似乎有一種更簡單的方法來處理此問題。 開發人員不知道認證在給定時間是否有效,但是肯定知道認證將過期多長時間 可以使用JavaScript對這些知識進行硬編碼,並且可以搶先將警報發送給用戶( setTimeout ),而不是等待用戶單擊然后嘗試找出。 這種方法不會讓我打擾彈出窗口阻止程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM