向所有登录Web应用程序的用户播放实时通知声音而无需重新加载页面



我知道网上有很多关于我的问题的解决方案,但没有一个对我有效。这就是我问这个问题的原因。

首先让我来解释一下我想要实现的目标-

->我正在开发一个多用户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函数。

希望这就是你想要的。

最新更新