簡體   English   中英

向所有登錄Webapp的用戶播放實時通知聲音,無需重新加載頁面

[英]Play Real-time Notification Sound to all the users logged in the Webapp Without reloading the page

我知道有很多解決方案可以在網上找到我的問題,但沒有一個能為我工作。 這就是我問這個問題的原因。

首先讓我解釋一下我想要實現的目標 -

- >我正在開發一個多用戶Web應用程序[ASP.Net] - >我正在使用SignalR來獲取實時數據庫更改通知,SignalR立即將更改通知傳輸給應用程序中登錄的所有用戶。 - >現在另外我要做的是為所有登錄用戶播放通知聲音,以便他們能夠理解需要注意的新通知。

這就是我到目前為止所做的 -

JavaScript的

<script>
    function playSound(mysound) {
        //thisSound = document.getElementById(mysound);
        //thisSound.Play();
        var audio = new Audio(mysound);
        audio.play();
    }

</script>

代碼背后 -

ScriptManager.RegisterClientScriptBlock(Me, [GetType](), "OpenWindow", "javascript: playSound('./audio/notification.wav')", True)

這個解決方案的問題是用戶需要重新加載頁面才能聽到通知聲音,如果用戶無法像SignalR處理通知那樣立即聽到聲音,我認為這是毫無意義的。

是否可以將聲音推送給所有客戶端,以便他們不需要重新加載頁面?

任何幫助將受到高度贊賞。 如果您需要進一步說明,請告訴我。

最后,我得到了它的工作。 我不得不稍微改變一下jquery -

<script type="text/javascript">
        function playSound(mysound) {
            //thisSound = document.getElementById(mysound);
            //thisSound.Play();
            var audio = new Audio(mysound);
            audio.play();                
        }

        $(function () {
            var notify = $.connection.notificationsHub;
            var audio;

            notify.client.displayNotification = function (s_Not, s_Path) {
                $("#newNot").html(s_Not);
                audio = new Audio(s_Path);
                var iLevel = "<%=System.Web.HttpContext.Current.Session("USER_LEVEL")%>";
                var i_OldNot = "<%=System.Web.HttpContext.Current.Session("NOT_COUNT")%>";
                if (iLevel == 2) {
                    //alert(i_OldNot  + " " + s_Not);
                    if (i_OldNot < i_Not) {
                        playSound("/audio/notification.wav");
                        //i_OldNot == Number(s_not);
                    }
                }
            };

            $.connection.hub.start();                                
        });
    </script>

在后面的代碼中,我必須設置一個會話變量來存儲更新前的最后一個通知的數量。 如果通知的先前和當前數量高於會話值,則通知聲音播放 -

System.Web.HttpContext.Current.Session("NOT_COUNT")= i_LastNotCount

現在播放的聲音沒有重新加載頁面。 特別感謝rdans ,因為他的以下評論我得到了這個想法 -

然后在評論中你說:

我已經實現了SignalR。 所以這根本不是問題。

這告訴我你可能不理解signalR正在做什么,因為signalR的全部意義是推送到瀏覽器而不必回發或使用ajax調用。

您使用signalR執行用戶登錄通知的時間,之后您可以從服務器調用javascript函數

希望這是你正在尋找的。

暫無
暫無

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

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