2015-04-22 41 views
3

我希望我的網絡應用程序可以升級爲爲Android + Chrome用戶添加主屏幕。 (靈感來自:Chromium Blog entry服務人員提取MP3音頻時拋出錯誤

要做到這一點,我需要一個服務工作者運行,甚至是一個虛擬的。 (Chrome需要服務工作者證明我對網絡應用的認真態度)

所以我創建了一個沒有內容的虛擬服務工作者。它通過正確的無緩存標頭提供服務,通過HTTPS提供服務,並被限定在整個域中。

事情工作一般,但每次我試圖動態創建一個音頻元素:

jQuery('<audio><source src="/beep.mp3" type="audio/mpeg"></source></audio>'); 

...我的控制檯顯示了一些不愉快(從Chrome Canary版採取更好的消息來自服務工作者線程,但基本上是相同的輸出是在Chrome電流):

Mixed Content: The page at 'https://my.domain.com/some/page' was loaded over HTTPS, but requested an insecure video ''. This content should also be served over HTTPS. 

GET https://my.domain.com/beep.mp3 400 (Service Worker Fallback Required) 

我想需要注意的是,明明是很重要的,我不是直接檢索資源,只創建元素,讓瀏覽器檢索MP3。

MP3確實獲取(我能夠在音頻元素上運行.play()方法)。這只是我的控制檯日誌中的錯誤堆積並使我懷疑這種方法的可靠性。此外,順便說一句,在金絲雀(但不是最新的)失敗將改變我的「HTTPS鎖」指標從綠色到「警告」(所以,未來的問題)。

音頻來源與頁面來自同一個域,並且都是HTTPS。所以來自服務工作者線程的「混合內容」消息很奇怪;它引用一個帶有''作爲url的視頻。

問題:我做錯了什麼或者這是一個Chrome錯誤?我需要的不僅僅是一個虛擬(空)服務工作者嗎?如果我做錯了什麼,我想尋找一種最佳實踐/長期型解決方案,而不是一起破解一些東西,但我會盡我所能。 ;)

+0

嘗試使用src屬性的全部網址:https://my.domain.com/beep.mp3 – Anarcociclista

+0

哪裏是你的服務人員的代碼? –

回答

0

它似乎是一個錯誤。這是在谷歌代碼的問題:

https://code.google.com/p/chromium/issues/detail?id=477685

+0

不知道這是否是相同的錯誤。這個錯誤聽起來與CORS有關,但我所做的一切都是同域,同一協議(我嘗試過,沒有方案+主機,沒有區別)。在那裏提出的解決方案還包括一個服務工作人員,專門重寫請求,而我的服務工作人員應該只是直接通過請求/響應。 –