【问题标题】:Can I get SignalR to not disconnect itself when settings window location?设置窗口位置时,我可以让 SignalR 不自行断开连接吗?
【发布时间】:2014-05-13 06:20:30
【问题描述】:

我正在编写一个简单的页面来侦听 SignalR 事件,一旦检测到这些事件就会对我们服务器上的 Web 服务执行 ajax 请求。

一旦该 ajax 请求完成,将返回一个带有自定义 URI 方案的 url,一旦重定向到该方案,将打开安装在客户端计算机上的自定义程序,而无需离开主页。这是通过在ajax请求的成功回调中调用window.location = url;来实现的。

此方法适用于我们网站的其他区域,我们正在使用它,发出多个 ajax 请求并在回调中进行重定向,因为它应该通过向我们的程序发送命令而不影响主页。

然而,我正在创建的新页面使用 SignalR 来决定何时发出这些相同的 ajax 请求,但它在第一次重定向时会自行断开连接。我在 javascript 控制台中发现以下消息,我理解在卸载页面时看到该消息是很正常的,但在我的场景中,调用页面从未真正卸载:与 ... 的连接被中断,而页面正在加载。

我正在寻找一种方法来阻止 SignalR 在重定向时自行断开连接,因为这会导致进一步的重定向失败,直到 SignalR 重新建立连接。

【问题讨论】:

  • 您是否尝试过明确设置.url 属性?如果未设置 SignalR 正在使用 window.location 来解析目标 url。
  • 我刚刚尝试在javascript中设置信号连接的url,结果相同。到目前为止,我发现解决此问题的唯一方法是在我的页面上嵌入一个隐藏的 iframe,并改为设置 iframe 的 .href 参数。

标签: javascript ajax signalr


【解决方案1】:

当用户离开页面时,SignalR 会尝试优雅地停止任何正在进行的连接。 SignalR 通过使用 jQuery 绑定到窗口卸载事件来做到这一点。通常这是使用 $(window).bind("unload", //... 完成的,但在 Firefox 中也使用 $(window).bind("beforeunload", //...

假设您自己没有附加到这些事件中的任何一个,您可以通过使用 jQuery 取消绑定 SignalR 绑定的 unload 和 beforeunload 事件处理程序来防止这种行为:

$(window).unbind("unload");
$(window).unbind("beforeunload");

【讨论】:

  • 从技术上讲,这已被弃用 - 所以要小心!见api.jquery.com/unloadgithub.com/SignalR/SignalR/issues/2496
  • @halter73 我在使用 Jquery.signalR-2.1.2.min.js 和 jquery-1.7.2.min.js 的 MVC 5 应用程序中遇到了这个问题(使用 Mozilla Firefox)我没有这些事件没有我自己的事件处理程序。我尝试了使用 unbind() 和 off() 的两种方式,但我仍然遇到了连接丢失的情况。有什么帮助吗?
猜你喜欢
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 2012-05-08
  • 2015-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多