尝试在clojurescript中支持跨浏览器前缀时,"未捕获的TypeError:非法调用"

Ste*_*gle 3 javascript 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!")))
Run Code Online (Sandbox Code Playgroud)

当我然后尝试从中调用它时start-fx,我得到了一个Uncaught TypeError: Illegal invocation调用getUserMedia.我该怎么做才能让我的代码与浏览器兼容?

Mik*_*uck 5

getUserMedia必须绑定到该navigator对象.相同的JavaScript将是这样的:

var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
                   navigator.mozGetUserMedia || msGetUserMedia;
if (getUserMedia) {
  getUserMedia = getUserMedia.bind(navigator);
}
Run Code Online (Sandbox Code Playgroud)