[英]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.