当前位置: 首页 > news >正文

网站维护费进入哪个科目房地产行业现状及前景

网站维护费进入哪个科目,房地产行业现状及前景,西安知名的集团门户网站建设公司,提升学历官网报名今天#xff0c;又解决了一个单子“UniApp的音频播放——点击视频进入空白解决视频播放器切换视频时一直加载的问题” 一、问题描述 在开发一个基于 video.js 的视频播放器时#xff0c;用户通过上下滑动切换视频时#xff0c;视频一直处于加载状态#xff0c;无法正常播放…        今天又解决了一个单子“UniApp的音频播放——点击视频进入空白解决视频播放器切换视频时一直加载的问题” 一、问题描述 在开发一个基于 video.js 的视频播放器时用户通过上下滑动切换视频时视频一直处于加载状态无法正常播放。通过日志可以看到视频源地址和索引更新是正确的但视频无法播放。具体表现为 视频加载卡住切换视频时播放器一直显示加载动画无法播放视频。 日志显示正常日志中显示的视频源地址和索引更新是正确的例如 即将更新视频源为: http://127.0.0.1:8000/media/m3u8/30bd5d2225919b1724ca69d07633beb1/index.m3u8 currentIndex: 1 videos长度: 4 播放器未正确响应尽管视频源地址更新了但播放器未能正确加载和播放新视频。 二、问题复现步骤 初始化播放器加载第一个视频播放器正常工作。 滑动切换视频用户通过上下滑动切换到下一个视频。 视频加载卡住播放器显示加载动画但视频无法播放。 日志输出日志显示视频源地址和索引更新正确但播放器未响应。 三、来请看代码各位客官 template!-- viewclickhandleVideoClicktouchstarthandleTouchStarttouchmovehandleTouchMovetouchendhandleTouchEnd --!-- 根据 isAdVideo 的值决定显示广告视频还是常规视频 --!-- 对于广告视频不显示控制条自动播放 --!-- video v-ifisAdVideo :srcvideoSrc :controlsfalse autoplay/video --!-- 对于常规视频显示控制条自动播放 --!-- video v-else :srcvideoSrc controls autoplay/video --!-- /view -- viewdiv idappdiv classvideo-js refvideos/div/div /view /templatescriptimport { baseUrl } from /common/api.js export default {data() {return {// 存储当前视频文件的路径videoSrc: ,// 标记当前视频是否为广告视频isAdVideo: false,// 存储广告的 URLadUrl: ,// 存储当前视频在视频列表中的索引currentIndex: 0,// 存储所有视频的数组videos: [],// 存储触摸开始时的 Y 坐标touchStartY: 0,// 存储触摸结束时的 Y 坐标touchEndY: 0,// video.js 的播放器实例player: null,};},onLoad(options) {// 从传入的参数中获取视频文件路径const videoFile options.videoFile;// 判断是否为广告视频将字符串 true 转换为布尔值const isAd options.isAd true;// 从传入的参数中获取广告 URL并进行解码const adUrl options.adUrl? decodeURIComponent(options.adUrl) : ;// 从传入的参数中获取视频列表并将其从 JSON 字符串转换为数组const videos options.videos? JSON.parse(decodeURIComponent(options.videos)) : [];// 将视频文件路径存储到 data 中修改错误点 1// this.videoFile videoFile;// 将是否为广告视频的状态存储到 data 中this.isAdVideo isAd;// 将广告 URL 存储到 data 中this.adUrl adUrl;// 将视频列表存储到 data 中this.videos videos;// 根据是否为广告视频来确定视频源的路径if (isAd) {// 假设广告视频的文件名直接作为参数传递提取文件名const adVideoPath ${videoFile};console.log(1111,adVideoPath);// 拼接完整的广告视频源路径this.videoSrc ${baseUrl}${adVideoPath};} else {// 对于常规视频在视频列表中查找匹配的视频文件const video videos.find(v {console.log(当前视频的 m3u8_url:, v.m3u8_url); // 打印每个视频的 m3u8_urlreturn v.m3u8_url videoFile;});console.log(222,videoFile);// const video videos.find(v v.m3u8_url videoFile);// console.log(222,v v.m3u8_url,videoFile);if (video) {// 拼接完整的常规视频源路径this.videoSrc ${baseUrl}${video.m3u8_url};} else {// 如果未找到对应的视频文件打印错误信息并退出方法console.error(未找到对应的视频文件路径);return;}}// 查找当前视频在视频列表中的索引this.currentIndex this.videos.findIndex(v {if (this.isAdVideo) {const asa v.ad v.ad.m3u8_url videoFile;// 对于广告视频通过广告视频文件查找索引console.log(当前视频的 vad:, v.ad.m3u8_url,asa);console.log(videoFile,videoFile)return asa ;}// 对于常规视频通过常规视频文件查找索引return v.m3u8_url videoFile;});console.log(this.videoFile,videos.find(v v.m3u8_url videoFile).m3u8_url);// 打印初始的视频文件路径console.log(Initial video file:, this.videoSrc);}, // beforeDestroy() { // var playerElement document.getElementById(video); // var player videojs.getInstance(playerElement); // if (player) { // player.dispose(); // } // },mounted() {this.initplayer();},beforeDestroy() {// 使用 $refs 来查找 video 元素const videoElement this.$refs.videos.querySelector(video);if (videoElement) {const player videojs.getPlayer(videoElement);if (player) {console.log(播放器正在销毁);player.dispose();} else {console.log(未找到播放器实例可能未初始化);}} else {console.log(未找到 video 元素);}},methods: {initplayer(){// const videoElement this.$refs.videos.querySelector(video);// const player videojs.getPlayer(videoElement);// player.dispose();// if (this.player) {// // 如果播放器已经初始化直接设置新的视频源// this.player.src({ src: this.videoSrc, type: application/x-mpegURL });// this.player.play();// return;// }let video document.createElement(video);video.id video;// video.style width: 100%; height: 100%;;// video.controls true;video.preload autovideo.setAttribute(playsinline, true) //IOS微信浏览器支持小窗内播放video.setAttribute(webkit-playsinline, true) //这个bai属性是ios 10中设置可以让视频在小du窗内播放也就是不是全zhi屏播放的video标签的一个属性video.setAttribute(x5-video-player-type, h5) //安卓 声明启用同层H5播放器 可以在video上面加东西// const adahttp://127.0.0.1:8000/media\\m3u8\\caba10d1b61e5f2aa1e068bebeb55663\\index.m3u8;let source document.createElement(source);// source.src ada;source.src this.videoSrc;video.appendChild(source);// returnthis.$refs.videos.appendChild(video);let that this;let player this.$video(video, {autoDisable: true,preload: none, //auto - 当页面加载后载入整个视频 meta - 当页面加载后只载入元数据 none - 当页面加载后不载入视频language: zh-CN,fluid: true, // 自适应宽高muted: false, // 是否静音aspectRatio: 16:9, // 将播放器置于流畅模式并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字例如16:9或4:3controls: true, //是否拥有控制条 【默认true】,如果设为false ,那么只能通过api进行控制了。也就是说界面上不会出现任何控制按钮autoplay: false, //如果true,浏览器准备好时开始回放。 autoplay: muted, // //自动播放属性,muted:静音播放loop: true, // 导致视频一结束就重新开始。 视频播放结束后是否循环播放controlBar: {volumePanel: { //声音样式inline: true // 不使用水平方式},timeDivider: true, // 时间分割线durationDisplay: true, // 总时间progressControl: true, // 进度条remainingTimeDisplay: true, //当前以播放时间fullscreenToggle: true, //全屏按钮pictureInPictureToggle: false, //画中画}}, function() {this.on(error, function(err) { //请求数据时遇到错误console.log(请求数据时遇到错误, err)});this.on(stalled, function(stalled) { //网速失速console.log(网速失速, stalled)});});},// 处理触摸开始事件记录触摸开始时的 Y 坐标handleTouchStart(event) {this.touchStartY event.touches[0].clientY;},// 处理触摸移动事件目前不做任何处理可添加优化逻辑handleTouchMove(event) {// 例如可以添加代码防止快速滑动时的抖动效果},// 处理触摸结束事件记录触摸结束时的 Y 坐标并调用 handleSwipe 方法handleTouchEnd(event) {this.touchEndY event.changedTouches[0].clientY;this.handleSwipe();},// 处理滑动操作handleSwipe() {// 计算触摸的垂直距离const distance this.touchEndY - this.touchStartY;// 如果滑动距离小于 30 像素不进行任何操作if (Math.abs(distance) 30) {return;}// 如果滑动距离大于 0表示向下滑动调用 handleSwipeDown 方法if (distance 0) {this.handleSwipeDown();} else {// 否则表示向上滑动调用 handleSwipeUp 方法this.handleSwipeUp();}},// 处理向上滑动切换到下一个视频handleSwipeUp() {// 如果不是最后一个视频if (this.currentIndex this.videos.length - 1) {// 增加当前视频索引this.currentIndex;// 更新视频信息this.updateVideo();// 打印下一个视频的文件路径console.log(Swipe Up: Next video file:, this.videoSrc);// 打印是否为广告视频console.log(是否广告, this.isAdVideo);} else {// 已到达最后一个视频打印提示信息console.log(已经是最后一个视频了);}},// 处理向下滑动切换到上一个视频handleSwipeDown() {// 如果不是第一个视频if (this.currentIndex 0) {// 减小当前视频索引this.currentIndex--;// 更新视频信息this.updateVideo();// 打印上一个视频的文件路径console.log(Swipe Down: Previous video file:, this.videoSrc);} else {// 已到达第一个视频打印提示信息console.log(已经是第一个视频了);}},// 更新视频信息包括视频源和广告 URLupdateVideo() {// 获取当前索引对应的下一个视频const nextVideo this.videos[this.currentIndex];console.log(11111, this.videos, nextVideo, this.currentIndex);// 判断下一个视频是否为广告视频this.isAdVideo !!nextVideo.ad;if (this.isAdVideo) {// 如果是广告视频更新视频源为广告视频源并打印console.log(1111, nextVideo.ad.m3u8_url);this.videoSrc ${baseUrl}${nextVideo.ad.m3u8_url};} else {// 如果是常规视频更新视频源为常规视频源并打印this.videoSrc ${baseUrl}${nextVideo.m3u8_url};console.log(2222, nextVideo.m3u8_url);}// 根据是否为广告视频更新广告 URL修改错误点 3if (this.isAdVideo) {this.adUrl nextVideo.ad.urll;} else {this.adUrl ;}// 当视频源更新时更新播放器的 srcif (this.player) {this.player.src({ src: this.videoSrc });}},// 处理视频点击事件handleVideoClick() {// 如果是广告视频且有广告 URLif (this.isAdVideo this.adUrl) {// 根据不同的平台使用不同的跳转方式打开广告 URLif (process.env.VUE_APP_PLATFORM h5) {// 在 H5 平台使用 window.open 打开广告 URLwindow.open(this.adUrl, _blank);} else {// 在小程序或其他平台使用 uni.navigateTo 进行跳转uni.navigateTo({url: /pages/webview/webview?url${encodeURIComponent(this.adUrl)}});}}}} }; /script 三、可能的原因 视频源路径格式问题 视频路径中使用了反斜杠 \例如http://127.0.0.1:8000\media\m3u8\30bd5d2225919b1724ca69d07633beb1\index.m3u8。 反斜杠在某些环境下可能导致路径解析错误。 播放器未正确销毁和重新初始化 在切换视频时旧的播放器实例可能未正确销毁导致新的播放器实例无法正常初始化。 视频加载超时或失败 视频文件可能无法加载或者加载时间过长导致播放器一直处于加载状态。 用户交互限制 某些浏览器要求视频播放必须在用户交互后触发如果未正确处理用户交互可能导致视频无法播放。 播放器初始化问题 播放器初始化逻辑中this.$video 未定义可能导致播放器无法正确初始化。 广告视频逻辑问题 广告视频的逻辑中nextVideo.ad.urll 拼写错误导致广告 URL 无法正确更新。 四、问题分析 1. 视频路径格式问题 问题视频路径中使用了反斜杠 \例如http://127.0.0.1:8000\media\m3u8\30bd5d2225919b1724ca69d07633beb1\index.m3u8。 影响在某些环境下反斜杠可能导致路径解析错误视频无法加载。 解决方案将反斜杠替换为正斜杠 /。 this.videoSrc ${baseUrl}${videoFile}.replace(/\\/g, /); 2. 播放器未正确销毁和重新初始化 问题在切换视频时旧的播放器实例可能未正确销毁导致新的播放器实例无法正常初始化。 影响切换视频时播放器可能卡在加载状态或无法播放。 解决方案在切换视频时销毁旧的播放器实例并重新初始化新的播放器实例。 updateVideo() {const nextVideo this.videos[this.currentIndex];this.isAdVideo !!nextVideo.ad;if (this.isAdVideo) {this.videoSrc ${baseUrl}${nextVideo.ad.m3u8_url}.replace(/\\/g, /);} else {this.videoSrc ${baseUrl}${nextVideo.m3u8_url}.replace(/\\/g, /);}this.adUrl this.isAdVideo ? nextVideo.ad.url : ;console.log(即将更新视频源为:, this.videoSrc);this.destroyPlayer(); // 销毁旧的播放器实例this.$nextTick(() {this.initplayer(); // 重新初始化播放器}); } 3. 视频加载超时或失败 问题视频文件可能无法加载或者加载时间过长导致播放器一直处于加载状态。 影响用户可能会看到视频一直加载无法播放。 解决方案设置超时机制防止长时间停留在加载状态。 async updateVideoSource() {if (!this.player) return;console.log(正在更新视频源:, this.videoSrc);try {this.player.pause(); // 暂停当前播放this.player.src({ src: this.videoSrc, type: application/x-mpegURL });this.player.load();// 监听 loadeddata 事件确保视频数据加载完成后再尝试播放this.player.one(loadeddata, () {console.log(视频数据加载完成);this.isPlaying false;this.player.play().then(() {this.isPlaying true;}).catch(error {console.error(播放失败:, error);});});// 设置一个超时机制防止长时间停留在加载状态const timeoutId setTimeout(() {console.warn(视频加载超时);// 尝试重新加载视频this.player.src({ src: this.videoSrc, type: application/x-mpegURL });this.player.load();}, 10000); // 10秒超时// 当视频加载完成时清除超时this.player.on(loadeddata, () clearTimeout(timeoutId));} catch (error) {console.error(更新视频源并准备播放失败:, error);} } 4. 用户交互限制 问题某些浏览器要求视频播放必须在用户交互后触发如果未正确处理用户交互可能导致视频无法播放。 影响视频无法自动播放用户需要手动点击播放按钮。 解决方案在用户交互后触发视频播放。 handleTouchEnd(event) {this.touchEndY event.changedTouches[0].clientY;this.handleSwipe();this.isUserInteracted true; // 标记用户交互if (this.player this.isUserInteracted) {this.player.play().catch(error {console.error(播放失败:, error);});} } 5. 播放器初始化问题 问题播放器初始化逻辑中this.$video 未定义可能导致播放器无法正确初始化。 影响播放器无法正常工作。 解决方案使用 videojs 直接初始化播放器。 initplayer() {let video document.createElement(video);video.id video;video.preload auto;video.setAttribute(playsinline, true);video.setAttribute(webkit-playsinline, true);video.setAttribute(x5-video-player-type, h5);let source document.createElement(source);source.src this.videoSrc;video.appendChild(source);this.$refs.videos.appendChild(video);this.player videojs(video, {autoplay: false,controls: !this.isAdVideo,sources: [{ src: this.videoSrc, type: application/x-mpegURL }]});this.player.on(error, (error) {console.error(视频加载错误:, error);}); } 6. 播放器销毁问题 问题在 beforeDestroy 钩子中播放器销毁逻辑可能无法正确执行。 影响播放器实例可能未正确销毁导致内存泄漏。 解决方案确保播放器实例被正确销毁。 beforeDestroy() {if (this.player) {console.log(播放器正在销毁);this.player.dispose();this.player null;} else {console.log(未找到播放器实例可能未初始化);} } 7. 日志输出不足 问题日志输出较少难以定位问题。 影响调试困难。 解决方案在关键步骤添加日志输出。 console.log(即将更新视频源为:, this.videoSrc); console.log(currentIndex:, this.currentIndex); console.log(videos长度:, this.videos.length); 8. 广告视频逻辑问题 问题广告视频的逻辑中nextVideo.ad.urll 拼写错误。 影响广告 URL 无法正确更新。 解决方案修正拼写错误。 if (this.isAdVideo) {this.adUrl nextVideo.ad.url; // 修正拼写错误 } else {this.adUrl ; } 五、完整代码 templateview touchstarthandleTouchStart touchmovehandleTouchMove touchendhandleTouchEnd!-- 视频容器 --div idappdiv classvideo-js refvideos/div/div/view /templatescript import { baseUrl } from /common/api.js; import videojs from video.js; import video.js/dist/video-js.css; // 引入默认样式export default {name: VideoPlayer,data() {return {videoSrc: ,isAdVideo: false,adUrl: ,currentIndex: 0,videos: [],touchStartY: 0,touchEndY: 0,player: null, // video.js 的播放器实例uniqueKey: Date.now(), // 用于强制刷新组件isPlaying: false, // 跟踪播放状态isUserInteracted: false, // 跟踪用户交互状态};},onLoad(options) {this.initFromOptions(options);},activated() {// 当组件被激活时从缓存中恢复重新初始化播放器this.$nextTick(() this.initplayer());},deactivated() {// 当组件被停用时进入缓存销毁播放器this.destroyPlayer();},mounted() {// 确保在挂载时初始化播放器this.$nextTick(() this.initplayer());},methods: {async initFromOptions(options) {const videoFile options.videoFile;const isAd options.isAd true;const adUrl options.adUrl ? decodeURIComponent(options.adUrl) : ;const videos options.videos ? JSON.parse(decodeURIComponent(options.videos)) : [];this.isAdVideo isAd;this.adUrl adUrl;this.videos videos;if (isAd) {this.videoSrc ${baseUrl}${videoFile}.replace(/\\/g, /);} else {const video videos.find(v v.m3u8_url videoFile);if (video) {this.videoSrc ${baseUrl}${video.m3u8_url}.replace(/\\/g, /);} else {console.error(未找到对应的视频文件路径);return;}}this.currentIndex this.videos.findIndex(v {if (this.isAdVideo) {return v.ad v.ad.m3u8_url videoFile;}return v.m3u8_url videoFile;});console.log(Initial video file:, this.videoSrc);await this.initplayer(); // 确保播放器初始化完成},async initplayer() {// 如果播放器已经存在则更新源而不是重新创建if (this.player) {await this.updateVideoSource();return;}let videoElement document.createElement(video);videoElement.id video;videoElement.preload auto;videoElement.setAttribute(playsinline, true);videoElement.setAttribute(webkit-playsinline, true);videoElement.setAttribute(x5-video-player-type, h5);let source document.createElement(source);source.src this.videoSrc;videoElement.appendChild(source);this.$refs.videos.appendChild(videoElement);// 使用 Vue 的 nextTick 方法确保 DOM 更新完成后才初始化 Video.js 播放器this.$nextTick(() {this.player videojs(videoElement,{autoplay: false,controls: !this.isAdVideo,sources: [{ src: this.videoSrc, type: application/x-mpegURL }]},async function onPlayerReady() {console.log(播放器已准备好);try {if (this.isUserInteracted) {await this.play(); // 使用 async/await 确保 play() 完成}} catch (error) {console.error(播放失败:, error);}}.bind(this));// 监听错误事件this.player.on(error, (error) {console.error(视频加载错误:, error);console.error(错误详情:, this.player.error()); // 获取详细的错误信息});});},destroyPlayer() {if (this.player) {console.log(播放器正在销毁);this.player.dispose();this.player null; // 清除 player 实例引用} else {console.log(未找到播放器实例可能未初始化);}},async updateVideoSource() {if (!this.player) return;console.log(正在更新视频源:, this.videoSrc);try {this.player.pause(); // 暂停当前播放this.player.src({ src: this.videoSrc, type: application/x-mpegURL });this.player.load();// 监听 loadeddata 事件确保视频数据加载完成后再尝试播放this.player.one(loadeddata, () {console.log(视频数据加载完成);this.isPlaying false;this.player.play().then(() {this.isPlaying true;}).catch(error {console.error(播放失败:, error);// 可以在这里添加重试逻辑或提示用户});});// 设置一个超时机制防止长时间停留在加载状态const timeoutId setTimeout(() {console.warn(视频加载超时);// 尝试重新加载视频this.player.src({ src: this.videoSrc, type: application/x-mpegURL });this.player.load();}, 10000); // 10秒超时// 当视频加载完成时清除超时this.player.on(loadeddata, () clearTimeout(timeoutId));} catch (error) {console.error(更新视频源并准备播放失败:, error);// 可以在这里添加重试逻辑或提示用户}},handleTouchStart(event) {this.touchStartY event.touches[0].clientY;},handleTouchMove(event) {// 这里可以添加优化逻辑但目前保持原样},handleTouchEnd(event) {this.touchEndY event.changedTouches[0].clientY;this.handleSwipe();this.isUserInteracted true; // 标记用户交互if (this.player this.isUserInteracted) {this.player.play().catch(error {console.error(播放失败:, error);});}},handleSwipe() {const distance this.touchEndY - this.touchStartY;if (Math.abs(distance) 30) return;if (distance 0) {this.handleSwipeDown();} else {this.handleSwipeUp();}},handleSwipeUp() {if (this.currentIndex this.videos.length - 1) {this.currentIndex;this.updateVideo();console.log(Swipe Up: Next video file:, this.videoSrc);console.log(是否广告, this.isAdVideo);} else {console.log(已经是最后一个视频了);}},handleSwipeDown() {if (this.currentIndex 0) {this.currentIndex--;this.updateVideo();console.log(Swipe Down: Previous video file:, this.videoSrc);} else {console.log(已经是第一个视频了);}},updateVideo() {const nextVideo this.videos[this.currentIndex];this.isAdVideo !!nextVideo.ad;if (this.isAdVideo) {this.videoSrc ${baseUrl}${nextVideo.ad.m3u8_url}.replace(/\\/g, /);} else {this.videoSrc ${baseUrl}${nextVideo.m3u8_url}.replace(/\\/g, /);}this.adUrl this.isAdVideo ? nextVideo.ad.url : ;console.log(即将更新视频源为:, this.videoSrc); // 添加日志输出console.log(currentIndex:, this.currentIndex); // 添加日志输出console.log(videos长度:, this.videos.length); // 添加日志输出this.destroyPlayer(); // 销毁旧的播放器实例this.$nextTick(() {this.initplayer(); // 重新初始化播放器});},handleVideoClick() {if (this.isAdVideo this.adUrl) {if (process.env.VUE_APP_PLATFORM h5) {window.open(this.adUrl, _blank);} else {uni.navigateTo({url: /pages/webview/webview?url${encodeURIComponent(this.adUrl)}});}}}},watch: {// 监听路由变化并强制刷新组件$route(to, from) {this.uniqueKey Date.now(); // 改变 key 来强制刷新组件this.$nextTick(() this.initplayer()); // 确保播放器在路由变化后重新初始化}} }; /scriptstyle scoped /* 添加样式 */ #app {width: 100%;height: 100%; } .video-js {width: 100%;height: 100%; } /style 总结 通过修复视频路径格式、确保播放器正确销毁和重新初始化、处理视频加载超时、确保用户交互后播放、修正播放器初始化逻辑以及修正广告视频逻辑可以有效解决视频切换时一直加载的问题。如果问题仍然存在建议进一步检查视频源的有效性和网络状态并使用浏览器的开发者工具查看网络请求和错误日志。
文章转载自:
http://www.morning.dwzwm.cn.gov.cn.dwzwm.cn
http://www.morning.fcxt.cn.gov.cn.fcxt.cn
http://www.morning.mrfbp.cn.gov.cn.mrfbp.cn
http://www.morning.ykmkz.cn.gov.cn.ykmkz.cn
http://www.morning.mztyh.cn.gov.cn.mztyh.cn
http://www.morning.thxfn.cn.gov.cn.thxfn.cn
http://www.morning.gfqj.cn.gov.cn.gfqj.cn
http://www.morning.wgkz.cn.gov.cn.wgkz.cn
http://www.morning.wqbrg.cn.gov.cn.wqbrg.cn
http://www.morning.ntzbr.cn.gov.cn.ntzbr.cn
http://www.morning.sypzg.cn.gov.cn.sypzg.cn
http://www.morning.nlrxh.cn.gov.cn.nlrxh.cn
http://www.morning.lbcfj.cn.gov.cn.lbcfj.cn
http://www.morning.wnjrf.cn.gov.cn.wnjrf.cn
http://www.morning.txrq.cn.gov.cn.txrq.cn
http://www.morning.kaylyea.com.gov.cn.kaylyea.com
http://www.morning.tbjtp.cn.gov.cn.tbjtp.cn
http://www.morning.sxygc.cn.gov.cn.sxygc.cn
http://www.morning.nwpnj.cn.gov.cn.nwpnj.cn
http://www.morning.nyplp.cn.gov.cn.nyplp.cn
http://www.morning.hxmqb.cn.gov.cn.hxmqb.cn
http://www.morning.bxhch.cn.gov.cn.bxhch.cn
http://www.morning.qttg.cn.gov.cn.qttg.cn
http://www.morning.mqfkd.cn.gov.cn.mqfkd.cn
http://www.morning.qnsmk.cn.gov.cn.qnsmk.cn
http://www.morning.wnnts.cn.gov.cn.wnnts.cn
http://www.morning.rghkg.cn.gov.cn.rghkg.cn
http://www.morning.qrmyd.cn.gov.cn.qrmyd.cn
http://www.morning.nfsrs.cn.gov.cn.nfsrs.cn
http://www.morning.zczkm.cn.gov.cn.zczkm.cn
http://www.morning.rbkml.cn.gov.cn.rbkml.cn
http://www.morning.hous-e.com.gov.cn.hous-e.com
http://www.morning.zxzgr.cn.gov.cn.zxzgr.cn
http://www.morning.lqjpb.cn.gov.cn.lqjpb.cn
http://www.morning.ccyjt.cn.gov.cn.ccyjt.cn
http://www.morning.pzbqm.cn.gov.cn.pzbqm.cn
http://www.morning.djwpd.cn.gov.cn.djwpd.cn
http://www.morning.csjps.cn.gov.cn.csjps.cn
http://www.morning.phechi.com.gov.cn.phechi.com
http://www.morning.nysjb.cn.gov.cn.nysjb.cn
http://www.morning.dqgbx.cn.gov.cn.dqgbx.cn
http://www.morning.rfrx.cn.gov.cn.rfrx.cn
http://www.morning.hjssh.cn.gov.cn.hjssh.cn
http://www.morning.kgcss.cn.gov.cn.kgcss.cn
http://www.morning.wwjft.cn.gov.cn.wwjft.cn
http://www.morning.hhqtq.cn.gov.cn.hhqtq.cn
http://www.morning.nwnbq.cn.gov.cn.nwnbq.cn
http://www.morning.pcshb.cn.gov.cn.pcshb.cn
http://www.morning.skfkx.cn.gov.cn.skfkx.cn
http://www.morning.mkczm.cn.gov.cn.mkczm.cn
http://www.morning.cthrb.cn.gov.cn.cthrb.cn
http://www.morning.rzbcz.cn.gov.cn.rzbcz.cn
http://www.morning.bndkf.cn.gov.cn.bndkf.cn
http://www.morning.rqwwm.cn.gov.cn.rqwwm.cn
http://www.morning.cywf.cn.gov.cn.cywf.cn
http://www.morning.mttqp.cn.gov.cn.mttqp.cn
http://www.morning.cftkz.cn.gov.cn.cftkz.cn
http://www.morning.jbnss.cn.gov.cn.jbnss.cn
http://www.morning.qgcfb.cn.gov.cn.qgcfb.cn
http://www.morning.klyyd.cn.gov.cn.klyyd.cn
http://www.morning.mnsmb.cn.gov.cn.mnsmb.cn
http://www.morning.mqnbm.cn.gov.cn.mqnbm.cn
http://www.morning.dwmmf.cn.gov.cn.dwmmf.cn
http://www.morning.qtsks.cn.gov.cn.qtsks.cn
http://www.morning.kfyqd.cn.gov.cn.kfyqd.cn
http://www.morning.fqqcn.cn.gov.cn.fqqcn.cn
http://www.morning.tldfp.cn.gov.cn.tldfp.cn
http://www.morning.tgnr.cn.gov.cn.tgnr.cn
http://www.morning.cjmmt.cn.gov.cn.cjmmt.cn
http://www.morning.darwallet.cn.gov.cn.darwallet.cn
http://www.morning.rkwwy.cn.gov.cn.rkwwy.cn
http://www.morning.yuminfo.com.gov.cn.yuminfo.com
http://www.morning.yrxcn.cn.gov.cn.yrxcn.cn
http://www.morning.myzfz.com.gov.cn.myzfz.com
http://www.morning.tqldj.cn.gov.cn.tqldj.cn
http://www.morning.gdljq.cn.gov.cn.gdljq.cn
http://www.morning.wmsgt.cn.gov.cn.wmsgt.cn
http://www.morning.jtmrx.cn.gov.cn.jtmrx.cn
http://www.morning.lonlie.com.gov.cn.lonlie.com
http://www.morning.zlrrj.cn.gov.cn.zlrrj.cn
http://www.tj-hxxt.cn/news/270857.html

相关文章:

  • 高师院校语言类课程体系改革与建设 教学成果奖申报网站南宁建站价格
  • 手机做网站的徐州做网站多少钱
  • 学网站开发要下载哪些软件有哪些建设销售型企业网站
  • mcmore商城网站开发杭州网站建设哪家快速上线
  • 怎样用数据库做网站企业手机版网站
  • 网站建设 中企动力洛阳分公司做电商网站的步骤
  • 公司网站设计要多少钱重庆市建设工程信息网官网公示
  • 设计学网站做网站最简单的方法
  • php建站软件怎么做装饰公司网站宣传
  • 上海平台网站建设公杭州有名的室内设计公司
  • php 网站后台管理系统龙岩房地产信息网
  • 做网站 视频宏发建设有限公司网站
  • 网站建设程序的步骤过程专业外贸网站建设
  • 专业h5网站制作建筑工程招聘信息网
  • 做网站0基础写代码安徽省工程信息网官网
  • gwt 网站开发织梦映像
  • 虚拟主机可以建设网站吗广告推广营销网站
  • 电子商务网站开发案例金融网站源码 asp
  • 绿色网站模板大全企业开展网络营销方案
  • 移动网站建设优势镇江网站制作费用
  • 邢台做wap网站找谁网站的优点缺点
  • 南皮做网站价格宣传推广方案
  • 做网站到底要不要营业执照北京到广州动卧
  • 当今网站开发技术的现状福建省效能建设网站
  • 广州网站建设咨询电话好用的网站链接
  • 模板网站也需要服务器吗网站开发都是用什么做的
  • 网站开发 质保金wordpress移动端页面
  • 网站排名提升易下拉教程深圳网站建设公司
  • 想找人做网站怎么了解网站上的地图代码
  • 内江移动网站建设注册网站需要备案吗