'Uncaught TypeError: Illegal invocation' when trying to support cross browser prefixes in clojurescript
'Uncaught TypeError: Illegal invocation' when trying to support cross browser prefixes in clojurescript
getUserMedia
有许多前缀在许多浏览器中仍然是必需的。我试图通过将所有前缀放在 getUserMedia
.
中来隐藏这些前缀的使用
(def getUserMedia
(or js/navigator.getUserMedia
js/navigator.webkitGetUserMedia
js/navigator.mozGetUserMedia
js/navigator.msGetUserMedia))
(defn start-fx [app]
(if getUserMedia
(getUserMedia
;; WORKS IF I REPLACE THE ABOVE getUserMedia WITH
;; js/navigator.webkitGetUserMedia USING CHROME BROWSER
#js {:video true :audio true}
#(om/update! app :record-src (.createObjectURL js/window.URL %))
#(throw %))
(js/alert "This browser does not support video recording!")))
然后当我尝试从 start-fx
调用它时,我在调用 getUserMedia
时得到一个 Uncaught TypeError: Illegal invocation
。我应该怎么做才能让我的代码跨浏览器兼容?
getUserMedia
必须绑定到 navigator
对象。等效的 JavaScript 是这样的:
var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia || msGetUserMedia;
if (getUserMedia) {
getUserMedia = getUserMedia.bind(navigator);
}
为了得到答案,我发布了我对问题的修复。呃,一定有更好的解决方案吗?
(def getUserMedia
(or js/navigator.getUserMedia
js/navigator.webkitGetUserMedia
js/navigator.mozGetUserMedia
js/navigator.msGetUserMedia))
(defn start-fx [app]
(if getUserMedia
(let [[c s f] [#js {:video true :audio true}
#(om/update! app
:record-src
(.createObjectURL js/window.URL %))
#(throw %)]]
(getUserMedia c s f))
(js/alert "This browser does not support video recording!")))
getUserMedia
有许多前缀在许多浏览器中仍然是必需的。我试图通过将所有前缀放在 getUserMedia
.
(def getUserMedia
(or js/navigator.getUserMedia
js/navigator.webkitGetUserMedia
js/navigator.mozGetUserMedia
js/navigator.msGetUserMedia))
(defn start-fx [app]
(if getUserMedia
(getUserMedia
;; WORKS IF I REPLACE THE ABOVE getUserMedia WITH
;; js/navigator.webkitGetUserMedia USING CHROME BROWSER
#js {:video true :audio true}
#(om/update! app :record-src (.createObjectURL js/window.URL %))
#(throw %))
(js/alert "This browser does not support video recording!")))
然后当我尝试从 start-fx
调用它时,我在调用 getUserMedia
时得到一个 Uncaught TypeError: Illegal invocation
。我应该怎么做才能让我的代码跨浏览器兼容?
getUserMedia
必须绑定到 navigator
对象。等效的 JavaScript 是这样的:
var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia || msGetUserMedia;
if (getUserMedia) {
getUserMedia = getUserMedia.bind(navigator);
}
为了得到答案,我发布了我对问题的修复。呃,一定有更好的解决方案吗?
(def getUserMedia
(or js/navigator.getUserMedia
js/navigator.webkitGetUserMedia
js/navigator.mozGetUserMedia
js/navigator.msGetUserMedia))
(defn start-fx [app]
(if getUserMedia
(let [[c s f] [#js {:video true :audio true}
#(om/update! app
:record-src
(.createObjectURL js/window.URL %))
#(throw %)]]
(getUserMedia c s f))
(js/alert "This browser does not support video recording!")))