2017-01-03 78 views
1

我正在嘗試調用一個更新瀏覽器關閉或選項卡關閉數據的服務。問題是服務呼叫使用$http及其異步,所以根據我的瀏覽器卸載事件取消該調用並關閉瀏覽器。我希望瀏覽器等到我得到該服務調用的響應/錯誤。如何等待瀏覽器關閉直至服務器調用完成?

我試過打電話e.preventDefault()e.stopPropagation()但它不工作。

function releaseDocument(e) { 
    EventService.releaseDocument().then(function() { 
     window.close(); 
    }, function() { 
     window.close(); 
    }); 
} 

$window.onbeforeunload = releaseDocument; 
$window.onunload = releaseDocument; 

任何人都可以幫助或建議任何替代方案來實現相同!?

+2

如果等到標籤關閉它在我的思維方式爲時已晚。考慮瀏覽器崩潰或電源故障......事件不會被觸發,或者用戶當時沒有連接。最好先發送它,以便您有機會發現失敗的請求 – charlietfl

+0

這只是不可行的。 –

+0

@charlietfl我同意你的意見。它適用於這種情況。現在只想手動處理瀏覽器關閉。 –

回答

0

可能是我們可以通過使用同步AJAX調用,也是我的建議。


我們將顯示一個確認框,當您關閉瀏覽器/標籤。同時我們會同步致電。但是我們應該在執行確認框行之前調用這個服務。因此,同步呼叫將執行每一行並返回結果,然後只有確認將觸發/關閉選項卡。我們在這裏沒有多少時間來執行這個功能。


window.addEventListener("beforeunload", function (e) { 
    var confirmationMessage = "Do you want close this browser";  
    releaseDocument()// it should be an sync function (like you can set async:false in your ajax options 

    (e || window.event).returnValue = confirmationMessage; //Gecko + IE 
    return confirmationMessage;       //Webkit, Safari, Chrome 
}); 
+0

您無法在'beforeunload'內運行阻止代碼 – charlietfl

+0

這就是爲什麼我告訴它這只是我的建議。我沒有測試它。 :( –

相關問題