javascript - 将 javascript 模块导入 ASP.NET MVC 项目的问题
问题描述
我正在开发一个 ASP.NET MVC 应用程序,但在导入 JavaScript 模块时遇到了问题。我有一个 JavaScript 文件,用于控制播放列表的显示,其中包含从 YouTube 捕获的视频。显示控制脚本来自 YouTube API v3 API 本身的示例,我做了一些调整以满足我的需要。我需要的一点是在视频播放完毕时更新数据库中的视频数据。为此,我创建了另一个updateVideo.js
文件,该文件导入到.js
控制视频播放的文件中。问题是当我导入updateVideo.js
模块进入视频播放器,播放器停止工作,浏览器控制台中没有显示错误消息。播放器代码中发生的另一个奇怪的事情是,在导入模块时,一些 YouTube API 变量和方法会变成灰色。我不知道这是否相关。
视频播放器管理器
import { update } from "./updateVideo.js";
// 2. This code loads the IFrame Player API code asynchronously.
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var videosPlayList = 0;
var currentVideo = 0;
var globalVideos = null;
// 3. This function creates an <iframe> (and YouTube player)
// after the API code downloads.
var player;
function onYouTubeIframeAPIReady() {
let videos = document.getElementsByClassName('videolink');
globalVideos = videos;
videosPlayList = videos.length;
currentVideo = 0;
ManagerPlayer(videos[0].id);
}
// 4. The API will call this function when the video player is ready.
function onPlayerReady(event) {
event.target.playVideo();
}
// 5. The API calls this function when the player's state changes.
// The function indicates that when playing a video (state=1),
// the player should play for six seconds and then stop.
var done = false;
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.ENDED) {
if (currentVideo < globalVideos.length - 1) {
var id = globalVideos[currentVideo].id;
update(id, document.getElementById('playListId').innerHTML);
ManagerPlayer(globalVideos[++currentVideo].id);
}
else {
alert('Parabéns, playlist finalizada!')
}
}
}
function stopVideo() {
player.stopVideo();
}
function ManagerPlayer(id) {
if (player == null) {
CriarPlayer(id);
}
else {
player.destroy();
CriarPlayer(id);
}
}
function CriarPlayer(id) {
player = new YT.Player('player', {
height: '360',
width: '640',
videoId: id,
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}
function exibirVideo(id) {
ManagerPlayer(id);
}
视频更新代码
export function update(id, playlistId)
{
var url = "/Playlist/AtualizaVideo";
$.post(url, { Id: id, pPlayListId: playlistId }, function (data) {
$("#msg").html(data);
});
}
看法
@model ZonaLivre_WebApp.Dommain.Modelos.PlaylistModel
@{
ViewData["Title"] = "ExibirPlaylist";
}
<h1>Playlist: @Model.NomePlayList</h1>
<span id="playListId" class="hiden">@Model.PlayListID</span>
<main class="container">
<div class="col">
<div id="containerDeVideo" class="column">
<div class="iframe-container" id="player"></div>
</div>
<div id="linkVideos" class="linkVideos">
@if (Model.VideosIdsYoutube.Count > 0)
{
foreach (var item in Model.VideosIdsYoutube)
{
<div class="divLink">
<a href="#" id=@item.VideoId class="videolink" onclick="exibirVideo(id);">@item.NomeDoVideo</a>
</div>
}
}
</div>
</div>
</main>
@section scripts
{
<script src="~/js/iFrameYoutube.js" defer></script>
}
解决方案
推荐阅读
- javascript - 如何找出字符串元素?
- oracle - 如何在 pl/sql oracle 中在 5 分钟内插入 100 万条数据?
- html - 如何使用 html 5、asp.net(无 PHP)向多个收件人发送邮件
- angular - 如何使用 Angular 7 显示 DFP 广告?
- javascript - 如何在 ReactJS 中使用带冒号的动态路由
- python-3.x - 根据 Pandas 中其他列的对应值替换列值
- c++ - 如何别名、声明和一起启动
- python - 无法使用 python cv2 在 Windows 上同时从两台摄像机(通过一个集线器)捕获帧
- database - Oracle 数据库通过 sqlplus 连接,但侦听器未在我的 Ubuntu 上运行
- php - MySQL:验证速率范围内的日期范围(laravel 可选)