我正试图在一个模态中观看视频,而无需亲自访问视频页面。


我正在使用Vue.js并通过一系列Ajax调用我能够在那里大部分时间。


Codpen: https://codepen.io/nolaandy/pen/BrbBzO


如果点击顶部的“vs Suns”,你会得到所有视频帖子的列表。然后单击任何图像,弹出模态组件并动态接收帖子的标题。


我想在那里运行视频,所以我尝试运行此脚本标记:


 < script class =“_ nbaVideoPlayerScout”data-team =“warriors”data-videoId =“/ video / {{{aad videoId from post ajax call}}”data-width =“768”data-height =“732”src =“https ://www.nba.com/scout/team/cvp/videoPlayerScout.js“>< /脚本>
 代码>


 当弹出模态,我看到我点击的帖子/图像的正确标题,我看到脚本标签与检查器中的标签完全相同,但脚本标签永远不会运行。

& #xA;我应该注入这个脚本吗? (这是在axios响应调用中)


 让theVideoId = response.data.content [0] .videoID

&#xA ;让s = document.createElement('script')
 s.setAttribute('class','_ nbaVideoPlayerScout')
 s.setAttribute('data-team','warriors')
 s.setAttribute('data-videoId','/ video /'+ theVideoId)
 s.setAttribute('data-width','768')
 s.setAttribute('data-height', '732')
 s.setAttribute('src','https://www.nba.com/scout/team/cvp/videoPlayerScout.js')
document.getElementById('popupVideo') .appendChild(s);



 MODAL COMPONENT - 点击其中一个帖子缩略图
&#xA ;
 const videoModal = Vue.component('VideoModal',{
 props:{
 id:{
 type:String,
 required :true
}
},
 data:function(){
 return {
 post:[],
}
},&# xA; mounted(){
 const singleApi ='https://cors-anywhere.herokuapp.com/www.nba.com/warriors/api/1.1/json?textf ORMAT = HTML&安培; NID ='
 axios.get(singleApi + this.id).then((response)=> {
 this.post = response.data.content [0]
 console.log('THE RESPONSE',回复)

让theVideoId = response.data.content [0] .videoID


 let s = document.createElement('script')
 s。 setAttribute('class','_ nbaVideoPlayerScout')
 s.setAttribute('data-team','warriors')
 s.setAttribute('data-videoId','/ video /'+ theVideoId) 
 s.setAttribute('data-width','768')
 s.setAttribute('data-height','732')
 s.setAttribute('src','https ://www.nba.com/scout/team/cvp/videoPlayerScout.js')
 document.getElementById('popupVideo')。appegChild(s);
})。catch((error) => {
 console.log(错误)
})

},
方法:{
 goBack:function(){
 router.go(-1)
 }
},
模板:`< div>
< div id =“video-popup”>
 < button class =“close-video-popup”@ click =“goBack”> close me< / button>
 < div class =“video-popup-wrapper”>
 < div class =“video-popup - title”> {{post.title}}< / div>
 < div class =“video-popup - video”id =“popupVideo”>< / div>
 < div class =“video-popup - share”>< / div>
< / div>
< / div>
< / div>`&# XA;})
 代码>


答案 0 :(得分:2)
我一时兴起做了这个改变:
// document.getElementById('scriptMe').appendChild(s);
document.body.appendChild(s);
繁荣,脚本运行和视频加载。
哪个超级有趣,因为“为什么”,对吧?
编辑: 此外,尝试其他脚本注入方法discussed here。
document.write(s.outerHTML) // s is a script node
也有效。实际上,您可以将该脚本节点嵌入到div
中,它也可以。
// var $container = document.getElementById('scriptMe'); // does not work
var $container = document.body
var range = document.createRange()
$container.appendChild(range.createContextualFragment(script_str))
有效,其中script_str
是一个html字符串文字。这将同时适用于"<script>....</script>"
或"<div id="myDiv"><script>...</script></div>"
但我测试的所有方法最终都需要在body
中完成注射。