Vợ tôi bị kích thích bởi một anh chàng mới ở công ty, anh ta xuất tinh lên mặt cô ấy, và sau đó cô ấy bị cắm sừng… 348NTR-068-C","lastmod":"2026-07-11","duration":"1:27:17","url":"/play/19267100.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA0MDIvYWM5ZDYyMTU0NjI0MWJjYzcyODFmY2Q2NzQ5NWEyNDguanBn.cache","vod_id":19194616,"title":"Chuyến đi suối nước nóng của WAAA301C cùng mẹ tôi, một người cuồng thể dục. Một người phụ nữ đã kết hôn nhưng đang gặp nhiều vấn đề về tâm lý mà tôi gặp ở công việc bán thời gian có ham muốn tình dục mãnh liệt, và tôi đã xuất tinh 12 lần ở tư thế phụ nữ ở trên.","lastmod":"2025-04-02","duration":"2:14:16","url":"/play/19194616.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvMzEwYzQ1NmI1NDE5MTE2M2U4ZTkzNjM1ZDNmODA2NWYuanBn.cache","vod_id":19248590,"title":"Một người phụ nữ quyến rũ, thân hình mảnh mai với nụ cười ngọt ngào! Cô ấy tận hưởng một buổi mát xa gợi cảm nhưng lại bị hành hạ bởi một dương vật tàn bạo, cuối cùng đạt đến cực khoái khổ dâm. BLOR-284","lastmod":"2026-03-11","duration":"2:05:30","url":"/play/19248590.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNGE2YmExZGQxMzc4ZDUxMmY2NWI2MjJkNDQyYTk2MzAuanBn.cache","vod_id":19190890,"title":"JUQ285C Một người bạn là mẹ đã mời tôi dùng ứng dụng hẹn hò để nhẹ nhàng chinh phục một \"chàng trai trẻ mà tôi thích\".","lastmod":"2025-03-30","duration":"2:54:15","url":"/play/19190890.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNzQ0YTc0OWE2YTFkNGUzNTRlMmY0ZTU5YzI1OGI4N2MuanBn.cache","vod_id":19074361,"title":"Một người chăm sóc trẻ con, ngực nở nang sẽ xoa dịu trái tim và cả \"cậu nhỏ\" đang phiền muộn của chúng ta.","lastmod":"2025-03-29","duration":"2:30:57","url":"/play/19074361.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA1MjIvMDViZjRlNGUxNjVhNjUwMjEyNDA5YjViNTIyZjAxMDcuanBn.cache","vod_id":19204140,"title":"10musume 071624_01 Một cô gái xinh đẹp thích bạo dâm, đặc biệt là thích nuốt trọn dương vật và cảm thấy hưng phấn khi nhìn thấy vẻ mặt đau đớn của đàn ông.","lastmod":"2025-05-22","duration":"0:45:40","url":"/play/19204140.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMjU5NTI5ZDEzM2NlODgxNTkxOTIyMTNkMDE2Y2E4N2IuanBn.cache","vod_id":19039161,"title":"KU【_NicoLove】-_Cô gái châu Á trong mơ của bạn_Phát hành lần đầu trực tuyến【Áo hai dây gợi cảm AP kèm tất】Xinh quá haha, phiên bản gốc HD 720P không có hình mờ","lastmod":"2025-03-28","duration":"","url":"/play/19039161.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYzE3YzIyYTkzODVlYjcyZTliMzIzNzYzY2Y1NTJmNDUuanBn.cache","vod_id":19133808,"title":"Tôi chỉ mong Ishikawa Mio có thể ở nhà và bầu bạn với tôi cho đến khi mặt trời mọc, rồi chúng ta có thể cùng nhau trải qua một buổi tối tuyệt vời. Mục tiêu rồi!","lastmod":"2025-03-29","duration":"3:30:15","url":"/play/19133808.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvMzYyYjU3M2MxNGM0MDQ2YjNhM2U3MzQzMjg3OGM4ZDQuanBn.cache","vod_id":19249219,"title":"MIDV-594-C Buổi thử vai diễn viên cho phim nâng ngực: Một người đàn ông có dương vật khổng lồ trải nghiệm tình dục nguyên thủy sau khi có thể xuất tinh giữa hai bầu ngực của Nakayama Fumika.","lastmod":"2026-03-16","duration":"2:26:20","url":"/play/19249219.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMmU0MzljZDAzMjEwZWNmZDllMzI5NGQ5NzkyMTk5ZGIuanBn.cache","vod_id":19174406,"title":"DVDMS520 Một cuộc khảo sát đường phố với chiếc gương thần kỳ độc quyền của một nữ nhân viên xinh đẹp! Hai đồng nghiệp thử quan hệ tình dục lần đầu tiên trong một căn phòng kín! 4. Nam và nữ nhân viên ở đây mất trí sau khi xoa bóp âm vật của nhau, đưa dương vật vào và thỏa mãn dục vọng của mình, ngay cả khi họ đang ở nơi làm việc! ? Chương trình đặc biệt đầu tiên có cảnh xuất tinh bên trong...","lastmod":"2025-03-30","duration":"4:00:33","url":"/play/19174406.html"}]},
videoTitle: '[Bản gốc] Rani Riels tình cờ gặp một anh chàng mọt sách kỳ lạ khi đang chạy bộ buổi sáng. Anh chàng mọt sách vừa đi vừa nhìn điện thoại và chào Rani.',
language: 'vi',
dataKey: '01',
loadingPlayer: true,
showShare: false,
pageUrl: '',
// RecommendedMovies 组件状态
isSingleColumn: false,
pageSize: 8,
currentPage: 1,
// 计算属性(使用 getter)
get layoutIconClass() {
return this.isSingleColumn ? 'icon-view-list' : 'icon-grid';
},
get layoutClass() {
return [
'row',
'g-3',
'row-cols-1',
this.isSingleColumn ? '' : 'row-cols-2',
'row-cols-lg-4'
].filter(Boolean).join(' ');
},
// 方法
onAppMounted() {
// 设置页面 URL
this.pageUrl = window.location.href;
// 保存观看历史
this.saveWatchHistory();
// 更新标签统计
if (this.videoData.tag && this.videoData.tag.length > 0) {
this.updateTagStats(this.videoData.tag);
}
// 发送点击统计
this.hitVideoId(this.videoData.id);
// 从 Cookie 读取布局偏好
const layoutCookie = this.getCookie('list_layout');
if (layoutCookie === 'single') {
this.isSingleColumn = true;
}
// 监听 iframe 加载完成,隐藏骨架屏
// 使用 setTimeout 确保 DOM 已完全渲染
setTimeout(() => {
const iframe = document.getElementById('v2-player');
const skeleton = document.getElementById('player-skeleton');
if (iframe && skeleton) {
// 定义隐藏骨架屏的函数
const hideSkeleton = () => {
skeleton.style.transition = 'opacity 0.3s ease';
skeleton.style.opacity = '0';
setTimeout(() => {
skeleton.style.display = 'none';
}, 300);
};
// 检查 iframe 是否已经加载完成
if (iframe.contentDocument || iframe.contentWindow) {
try {
// 如果 iframe 已加载,直接隐藏骨架屏
if (iframe.contentWindow.document.readyState === 'complete') {
setTimeout(hideSkeleton, 500);
return;
}
} catch (e) {
console.log('[Video] 跨域 iframe,无法检查状态:', e.message);
// 跨域情况下无法访问 contentWindow,继续监听 load 事件
}
}
// 监听 load 事件
iframe.addEventListener('load', () => {
console.log('[Video] iframe load 事件触发');
setTimeout(hideSkeleton, 500);
});
// 添加超时保护,确保骨架屏最终会被隐藏
setTimeout(() => {
if (skeleton.style.display !== 'none') {
console.log('[Video] 超时保护触发,强制隐藏骨架屏');
hideSkeleton();
}
}, 5000); // 5秒后强制隐藏
} else {
console.error('[Video] 未找到 iframe 或 skeleton 元素');
}
}, 0);
},
// 随机跳转
async jumpToRandomVideo() {
try {
const response = await fetch(`/api/qun/randomid?t=${Date.now()}`, {
headers: {
'x-data-key': this.dataKey,
'x-api-key': 'dagexxx.com'
}
});
const data = await response.json();
if (data?.status === 1 && data?.data?.id) {
window.location.href = `/${this.language}/play/${data.data.id}.html`;
} else {
console.error('获取随机视频失败:', data?.message || '未知错误');
}
} catch (err) {
console.error('获取随机视频失败:', err);
}
},
// 复制分享链接
copyShareLink() {
const input = this.$refs.shareInput;
if (input) {
input.select();
input.setSelectionRange(0, 99999); // For mobile devices
// 尝试使用现代 API
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(this.pageUrl).then(() => {
alert('Đã sao chép liên kết!');
}).catch(() => {
// 降级到旧方法
document.execCommand('copy');
alert('Đã sao chép liên kết!');
});
} else {
// 降级到旧方法
document.execCommand('copy');
alert('Đã sao chép liên kết!');
}
}
},
// 切换布局
toggleLayout() {
this.isSingleColumn = !this.isSingleColumn;
this.setCookie('list_layout', this.isSingleColumn ? 'single' : 'multi', 30);
},
// 加载更多
loadMore() {
this.currentPage++;
},
// 保存观看历史
saveWatchHistory() {
try {
const storageKey = 'watchHistory';
let history = JSON.parse(localStorage.getItem(storageKey) || '[]');
// 解码 HTML 实体编码的标题
const decodeHtmlEntities = (text) => {
const textarea = document.createElement('textarea');
textarea.innerHTML = text;
return textarea.value;
};
const video = {
id: this.videoData.id,
title: decodeHtmlEntities(this.videoData.title),
image: this.videoData.images || this.videoData.preview,
duration: this.videoData.duration || ''
};
// 过滤掉已存在的相同 ID 视频
history = history.filter(item => item.id !== video.id);
// 添加新记录到最前面
history.unshift(video);
// 限制最多保存 100 条
if (history.length > 100) {
history = history.slice(0, 100);
}
localStorage.setItem(storageKey, JSON.stringify(history));
} catch (e) {
console.error('Failed to save watch history:', e);
}
},
// 更新标签统计
updateTagStats(tags = []) {
// HTML 实体解码函数
const decodeHtmlEntities = (text) => {
const textarea = document.createElement('textarea');
textarea.innerHTML = text;
return textarea.value;
};
const storageKey = this.dataKey + 'tagWatchStats';
const lastWatchedKey = this.dataKey + 'tagLastWatched';
const raw = localStorage.getItem(storageKey);
const stats = raw ? JSON.parse(raw) : {};
// 解码标签并统计
const decodedTags = tags.map(tag => decodeHtmlEntities(tag));
decodedTags.forEach(tag => {
stats[tag] = (stats[tag] || 0) + 1;
});
localStorage.setItem(storageKey, JSON.stringify(stats));
localStorage.setItem(lastWatchedKey, JSON.stringify(decodedTags));
},
// 点击统计
hitVideoId(id) {
fetch(`/api/qun/hit?type=play&id=${id}`, {
method: 'GET',
headers: {
'x-data-key': this.dataKey,
'x-api-key': 'dagexxx.com'
}
}).catch(err => {
console.error('点击统计失败:', err);
});
},
// Cookie 工具方法
getCookie(name) {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(';').shift();
},
setCookie(name, value, days) {
const expires = new Date(Date.now() + days * 864e5).toUTCString();
document.cookie = `${name}=${value}; expires=${expires}; path=/`;
}
};
}