首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当试图支持clojurescript中的跨浏览器前缀时,“未捕获的TypeError:非法调用”

当试图支持clojurescript中的跨浏览器前缀时,“未捕获的TypeError:非法调用”
EN

Stack Overflow用户
提问于 2015-07-17 17:24:30
回答 2查看 591关注 0票数 3

getUserMedia有许多前缀,在许多浏览器中仍然是必需的。我试图通过在getUserMedia中放置所有前缀来隐藏这些前缀的使用。

代码语言:javascript
复制
(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。我应该怎么做才能允许代码跨浏览器兼容?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-17 18:34:31

getUserMedia必须绑定到navigator对象。对应的JavaScript应该是:

代码语言:javascript
复制
var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
                   navigator.mozGetUserMedia || msGetUserMedia;
if (getUserMedia) {
  getUserMedia = getUserMedia.bind(navigator);
}
票数 5
EN

Stack Overflow用户

发布于 2015-07-20 17:47:37

为了得到一个答案,我发布了我的解决办法。肯定有更好的解决办法吗?

代码语言:javascript
复制
(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!")))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31481396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档