PrimeFaces 6.2 p:photocam组件在Chrome中失效问题咨询
解决PrimeFaces 6.2 p:photocam在Chrome中失效的问题
这个问题的根源很明确:Chrome从版本68开始弃用了URL.createObjectURL()处理媒体流的方式,强制要求使用HTMLMediaElement.srcObject,但PrimeFaces 6.2自带的photocam.js还在依赖旧API,导致无法正常捕获摄像头画面。你可以通过以下两种方式继续复用这个组件:
方法一:自定义覆盖photocam.js文件(无需升级PrimeFaces)
PrimeFaces支持通过项目内的资源文件覆盖框架自带的资源,步骤非常简单:
在你的项目
webapp/resources/primefaces/photocam/路径下创建photocam.js文件(如果对应目录不存在,手动新建即可)。找到原
photocam.js中处理媒体流的handleStream方法,原代码大概是这样:handleStream: function(stream) { this.stream = stream; this.video.src = URL.createObjectURL(stream); URL.revokeObjectURL(this.video.src); this.video.play(); }将其替换为使用
srcObject的版本:handleStream: function(stream) { this.stream = stream; this.video.srcObject = stream; this.video.play(); }这里可以去掉
URL.revokeObjectURL()的调用,因为使用srcObject时,浏览器会自动管理资源释放,不需要手动操作。重启你的Web应用,刷新Chrome浏览器后测试组件功能,应该就能正常捕获摄像头画面了。
方法二:升级PrimeFaces到修复该问题的版本
如果项目允许升级框架,你可以将PrimeFaces升级到6.2.13及以上版本(或者直接升级到7.0+),官方在后续版本中已经修复了这个Chrome兼容性问题,升级后无需手动修改代码就能正常使用p:photocam组件。
内容的提问来源于stack exchange,提问作者Rafael Bomfim
相关产品推荐
相关产品推荐

