2016-05-18 67 views
4

我正在寫一個事件記錄器,使用Web工作人員在輔助進程中處理它。工作人員在本地收集事件,然後每隔幾秒將其發送一批。在Web工作者關閉之前有什麼方法可以執行操作嗎?

我需要一種方式來發送任何未發出的批次,如果瀏覽器或選項卡關閉。有什麼方法讓網絡工作人員傾聽onclose事件?

我意識到我可以在應用程序本身做到這一點,但記錄器是將在多個地方使用的節點包,我寧願不讓前端負責清理事件記錄器。

+0

我已經度過了那些瘋狂的質量傢伙想要報告所有的時間,即使窗戶藍屏。告訴他們這是不可能的,他們不會爭辯:) –

+0

這對您有幫助嗎? https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope/onclose – dlkulp

+0

@dlkulp哦,夥計,我希望如此。讓我試試看。 – JesseF

回答

2

web worker規格的processing model部分沒有提到任何內容,特別是「殺死工人」和「終止工人」部分。我認爲你沒有多少選擇,只能讓UI線程上的代碼向工作人員發送一條消息,告訴它清理。

+1

這就是我要來的結論,但我希望有一些我錯過了。我會把這個開放一段時間,但除非發生奇蹟,否則我最終可能會將此標記爲決議。 – JesseF

+0

@JesseF:是的,我至少會給它一整天。很高興做錯了。 –

2

看起來你可以做self.onclose = function() { ... };當工人關閉時會被調用。更多可以閱讀here。由於工人有自己的環境,因此您必須通過WorkerGlobalScope訪問示波器。公開的WorkerGlobalScope.self應允許您訪問諸如onclose()之類的事件。

這裏的警告似乎是API不標準化。你必須檢查你的瀏覽器,看它是否被支持(並且它看起來像微軟沒有用IE/Edge實現這個好運氣)。現在做這個跨平臺的最好方法可能是@ T.J。 Crowder建議在用戶界面上放置代碼以要求工人關閉。

+0

我正在嘗試,現在還沒有得到它的工作。在Chrome中測試(據說它是支持的),也會在FF中試用它。 – JesseF

+0

更新:在Firefox中似乎也不起作用。不打擾與IE /邊緣。 – JesseF

+0

更新2:經過進一步研究,它看起來像close()方法仍然是實驗性的,並且它的兼容性值得懷疑。看起來我稍後必須重新訪問,一旦完全烘焙。 – JesseF

相關問題