2014-05-09 35 views
1

我正在編寫一個簡單的頁面,用於監聽曾經檢測到的SignalR事件,它將對我們的服務器上的Web服務執行ajax請求。當設置窗口位置時,可以讓SignalR不斷開自己嗎?

一旦完成了ajax請求,就會返回一個具有自定義URI方案的url,該方案一旦被重定向到,就會打開安裝在客戶端機器上的自定義程序,而無需離開主頁面。這是通過在ajax請求的成功回調中調用window.location = url;來實現的。

此方法在我們網站的其他領域發現我們正在使用這種方法,通過向我們的程序發送命令而不影響主頁面,在回調工作中發出多個ajax請求並重定向。

然而,我創建的新頁面使用SignalR來決定何時做出相同的Ajax請求,但它在第一次重定向時斷開連接。我在javascript控制檯中發現了以下消息,我知道這是非常正常的,以查看何時卸載頁面,但在我的情況下,調用頁面從未實際卸載:到頁面的連接在頁面中斷時正在加載。

我正在尋找一種方法來阻止SignalR在重定向上斷開連接,因爲這會導致進一步的重定向失敗,直到SignalR重新建立連接。

+0

你有沒有嘗試設置' .url'屬性明確嗎?如果沒有設置SignalR正在使用window.location來解析目標url。 – Pawel

+0

我剛剛嘗試在javascript中設置信號連接的url,並得到相同的結果。到目前爲止,我發現的唯一方法是在頁面中嵌入一個隱藏的iframe,並設置iframe的'.href'參數。 – EdSalter

回答

0

當用戶導航離開頁面時,SignalR會嘗試正常停止任何正在進行的連接。 SignalR通過使用jQuery綁定到窗口卸載事件來完成此操作。通常這是使用$(window).bind("unload", //...完成的,但在Firefox中也使用$(window).bind("beforeunload", //...

假設你不重視對這些事件自己,你可以通過使用jQuery通過解除綁定約束SignalR卸載和beforeunload事件處理程序防止這種行爲:

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

技術上這是不贊成的 - 所以要小心!請參閱http://api.jquery.com/unload/和https://github.com/SignalR/SignalR/issues/2496 –

+0

@ halter73我在使用Jquery的MVC 5應用程序中面臨此問題(使用Mozilla Firefox)。 signalR-2.1.2.min.js&jquery-1.7.2.min.js我沒有我自己的這些事件的事件處理程序。我嘗試了使用unbind()和off()的方式,但仍然遇到了連接丟失的問題。任何幫助? – Shaggy