慕無忌1623718
2021-04-28 13:42:54
當用戶單擊下載按鈕/鏈接時,頁面上將顯示加載屏幕。下載過程完成后,我在此按鈕上使用onblur事件隱藏我的加載屏幕。它可以在任何瀏覽器上正常運行,但不能在谷歌瀏覽器上運行。我可以在Chrome瀏覽器中使用任何事件監聽器或其他簡單方法嗎?關聯:<a href="/resources/foo" class="show-ls" onblur="hideLS()">Download</a>show-ls函數僅顯示加載屏幕:$('.show-ls').click(function () { $('#loading-screen').show();});加載屏幕是正文中的div元素:<div id="loading-screen" class="loading-screen" style=""></div>.loading-screen { background: rgba(255, 255, 255, 0.6) url('/images/loadingscreen.gif') no-repeat fixed center center; width: 100%; height: 100%; position: fixed;}hideLS函數只是隱藏加載屏幕:hideLS= function () { var loadingScreen = $('div.loading-screen'); if (loadingScreen.length > 0) loadingScreen.hide();};下載過程可以,加載屏幕也可以。問題僅在于在Chrome中完成文件下載后隱藏加載屏幕。
2 回答

慕沐林林
TA貢獻2016條經驗 獲得超9個贊
blur事件只是一個脆弱的解決方法,可能無法在瀏覽器中運行。
該blur
事件意味著某件事正在失去焦點??赡苁荈irefox瀏覽器(及其他)確實確實模糊了您單擊的鏈接,但其他任何東西也可能模糊了該鏈接(更改選項卡,單擊加載屏幕等)。這可能是您不想要的。
而且由于HTTP是一種無狀態協議,因此在沒有服務器幫助的情況下,我們無法知道客戶端何時完成此操作。而且您不能依靠JS來檢測到此錯誤,因為文件下載是在“其他選項卡”中進行的,而您無法訪問該文件。
我可以想象的唯一解決方案(看起來也是如此):當下載開始時,啟動一個JS間隔,該間隔定期(例如每500毫秒左右)檢查服務器的下載狀態。在服務器端,您必須在啟動時向用戶標識下載,并在詢問時將狀態返回給客戶端。當然,這如何工作取決于您使用的服務器環境和編程語言。我知道,您可以使其在PHP中運行,但我不了解所有其他語言。
順便說一句:我將“加載屏幕”稱為“加載指示器”,因為加載屏幕(或啟動屏幕)是在軟件加載之前(至少在我的計算機/大腦上)顯示一次的圖片。
添加回答
舉報
0/150
提交
取消