【发布时间】:2018-09-20 12:32:17
【问题描述】:
我正在尝试以模式观看 onClick 视频,而无需访问视频页面本身。
我正在使用 Vue.js,并且通过一系列 Ajax 调用,我能够完成大部分工作。
密码笔:https://codepen.io/nolaandy/pen/BrbBzO
如果您点击顶部的“vs Suns”,您会看到所有视频帖子的列表。然后点击任意一张图片,弹出模态组件,动态获取文章标题。
我也想在那里播放视频,所以我尝试运行这个脚本标签:
< script class="_nbaVideoPlayerScout" data-team="warriors" data-videoId="/video/{{unique videoId from post ajax call}}" data-width="768" data-height="732" src="https://www.nba.com/scout/team/cvp/videoPlayerScout.js"></script>
当模式弹出时,我看到了我点击的帖子/图像的正确标题,并且我看到了与检查器中应有的完全一样的脚本标签,但脚本标签永远不会运行。
我应该以其他方式注入此脚本吗? (这是在axios响应调用里面)
let 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').appendChild(s);
MODAL COMPONENT -- 在点击其中一个帖子缩略图时触发
const videoModal = Vue.component('VideoModal', {
props: {
id: {
type: String,
required: true
}
},
data: function () {
return {
post: [],
}
},
mounted() {
const singleApi = 'https://cors-anywhere.herokuapp.com/www.nba.com/warriors/api/1.1/json?textformat=html&nid='
axios.get(singleApi + this.id).then((response) => {
this.post = response.data.content[0]
console.log('THE RESPONSE', response)
let 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').appendChild(s);
}).catch((error) => {
console.log(error)
})
},
methods: {
goBack: function () {
router.go(-1)
}
},
template:`<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>`
})
【问题讨论】:
-
这个答案可能对你有帮助stackoverflow.com/a/8578840/1309377
-
我希望这能奏效,但我得到了同样的结果。添加了脚本,但没有运行任何内容。
-
这太疯狂了,因为如果我添加一个带有警报的脚本,我会收到警报弹出窗口: var s = document.createElement('script') s.type = 'text/javascript' var code = 'alert("'+theVideoId+'");'尝试 { s.appendChild(document.createTextNode(code)); document.getElementById('scriptMe').appendChild(s); } 捕捉 (e) { s.text = 代码; document.getElementById('scriptMe').appendChild(s); }
-
开发控制台有错误吗?当您加载此脚本时,您预计会发生什么?
-
我正在尝试显示视频。此时没有错误。如果将此脚本标签添加到代码笔中,您将看到视频弹出窗口:
标签: javascript vue.js append