fix(electron): Some YouTube videos cannot be played without referer

pull/2883/head
Alexander Wang 2021-09-17 23:04:57 +08:00 committed by Tienson Qin
parent 5a5a730053
commit a254a37a80
1 changed files with 17 additions and 1 deletions

View File

@ -11,7 +11,7 @@
["fs-extra" :as fs]
["path" :as path]
["os" :as os]
["electron" :refer [BrowserWindow app protocol ipcMain dialog Menu MenuItem] :as electron]
["electron" :refer [BrowserWindow app protocol ipcMain dialog Menu MenuItem session] :as electron]
["electron-window-state" :as windowStateKeeper]
[clojure.core.async :as async]
[electron.state :as state]
@ -61,6 +61,22 @@
url MAIN_WINDOW_ENTRY
win (BrowserWindow. (clj->js win-opts))]
(.manage win-state win)
(.onBeforeSendHeaders (.. session -defaultSession -webRequest)
(clj->js {:urls (array "*://*.youtube.com/*")})
(fn [^js details callback]
(let [url (.-url details)
urlObj (js/URL. url)
origin (.-origin urlObj)
requestHeaders (.-requestHeaders details)]
(if (and
(.hasOwnProperty requestHeaders "referer")
(not-empty (.-referer requestHeaders)))
(callback #js {:cancel false
:requestHeaders requestHeaders})
(do
(set! (.-referer requestHeaders) origin)
(callback #js {:cancel false
:requestHeaders requestHeaders}))))))
(.loadURL win url)
(when dev? (.. win -webContents (openDevTools)))
win))