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。我应该怎么做才能允许代码跨浏览器兼容?
发布于 2015-07-17 18:34:31
getUserMedia必须绑定到navigator对象。对应的JavaScript应该是:
var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia || msGetUserMedia;
if (getUserMedia) {
getUserMedia = getUserMedia.bind(navigator);
}发布于 2015-07-20 17:47:37
为了得到一个答案,我发布了我的解决办法。肯定有更好的解决办法吗?
(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!")))https://stackoverflow.com/questions/31481396
复制相似问题