Reagent(ClojureScript)中[:video]无法嵌入视频的问题求助
问题原因与解决方案
核心问题是你在Reagent代码里使用了本地文件系统的绝对路径(C:\\Users\\user\\...),而Web应用通过shadow-cljs运行时是基于HTTP协议的本地开发服务器,浏览器的安全策略禁止HTTP环境下直接访问本地文件系统的绝对路径——这也是为什么纯HTML用file://协议打开能正常显示,但Reagent应用不行的原因。
解决步骤如下:
调整视频文件位置
shadow-cljs默认的静态资源目录是项目根目录下的public文件夹,把testVideo.mp4移动到public目录下,比如创建public/videos子目录存放视频,最终路径为testProject/public/videos/testVideo.mp4。修改Reagent代码的路径
将:src的值改为相对于应用根路径的相对路径:
[:video {:muted true :loop true :autoplay true :height "240px" :width "320px"} [:source {:type "video/mp4" :src "/videos/testVideo.mp4"}]]
可选方案(不移动文件)
如果你不想移动视频文件,可以在shadow-cljs.edn中配置把src/main/resources目录设为静态资源目录:
:dev-http {8080 "public" :resource-root "src/main/resources"}
之后Reagent代码里的路径可以改为"/testVideo.mp4"即可访问原位置的视频文件。
另外确认下你的属性配置是正确的:autoplay配合muted符合现代浏览器自动播放的规则,其他属性也没问题。
内容的提问来源于stack exchange,提问作者Viktor Karsakov
相关产品推荐
相关产品推荐

