Ladyboy AVDEBUT mới thâm nhập, cực khoái đầu tiên trong đời Momona Mikami 三神ももなグローリークエスト","lastmod":"2026-07-11","duration":"02:54:28","url":"/play/19165948.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNjU5MmZhMDZkZDZlYjJkNDViOWMzNzYwYjk1YjQwYjguanBn.cache","vod_id":18953711,"title":"MVSD-359 Nếu bạn là một ông già giàu có, bạn cũng có thể làm được! Câu lạc bộ quần vợt JD Mua bánh kem dành cho người lớn Mita An Takasugi Mari","lastmod":"2025-12-14","duration":"01:58:47","url":"/play/18953711.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNjc3ZTA0OGE0ZDcwMzc4NjRjYWJjMmM2N2M5YzNlZTcuanBn.cache","vod_id":19017007,"title":"MMND171 \"AV Impossible\" Hiiragi Rui, 19 tuổi. Một người mẫu ảnh nổi tiếng với vòng một tự nhiên cỡ G, cô ấy bị trêu chọc và vuốt ve một cách triệt để.","lastmod":"2025-03-24","duration":"01:57:54","url":"/play/19017007.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA1MDYvNzI5MzU4NGM5NmNiNmQ3MGYyY2RhYmRmMzc4Njg2MDAuanBn.cache","vod_id":19032290,"title":"200GANA-2812 Cảnh nóng nhẹ nhàng, lần đầu tiên quay phim. Năm 2020, sau khi tan làm, tôi đã tiếp cận một người đẹp mảnh mai, có phong cách độc đáo ở Ikebukuro!","lastmod":"2025-05-06","duration":"01:09:43","url":"/play/19032290.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMDgxNjMxZjg1ZTg5ZGFiMzM0NGY0MDQzYjRmNGJhM2QuanBn.cache","vod_id":18974896,"title":"LLAN-002 Nữ sinh viên đại học. Còn trinh. Một cảm giác mới lạ... Tâm trí tôi đang bị khuấy động bởi một cảm xúc mới lần đầu tiên... Tôi nghĩ mình thích phụ nữ...","lastmod":"2025-03-23","duration":"01:45:32","url":"/play/18974896.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNGYyYTMzYTE0N2MwZDc1Y2Q5OWFlMGFlODk3YWYxMjQuanBn.cache","vod_id":18976030,"title":"LZDQ-019 Một cuộc quan hệ tình dục đồng tính nữ với người bạn thân nhất của tôi! Buổi hẹn hò đầu tiên tại nhà của một cô gái nhút nhát, được nuông chiều và một cô gái ngây thơ - Chiyo Chigusa, Kurumi Shiki","lastmod":"2025-12-14","duration":"02:11:52","url":"/play/18976030.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvODE5YzI0NmQ2NjdkZmEzYzVkODI0MmJjNzViMDNlZTIuanBn.cache","vod_id":19157479,"title":"Cú đánh đầu tiên: Kỷ lục về những người phụ nữ đã lập gia đình - Horiguchi Sayuri (センタービレッジ)","lastmod":"2026-05-10","duration":"01:57:19","url":"/play/19157479.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMGZmZWNlOTdjMzM2NWFkZWEwZDM2N2NhZjAzZGM2NTguanBn.cache","vod_id":18963258,"title":"CIEL-001 Cosplay: Má ửng hồng và tim đập thình thịch bên cô bạn gái ngực khủng, cô ấy đã phải lòng bạn trai ngực cỡ G của mình ◆ Buổi hẹn hò ngọt ngào sau giờ học tại nhà, ân ái trong bộ đồ bơi và sườn xám đồng phục học sinh - Honoka Wakamiya","lastmod":"2025-12-14","duration":"01:51:43","url":"/play/18963258.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYzllYWE3MTEzMmNlMTM2YzUxNTcwMjc3NmQ2ZDkyODIuanBn.cache","vod_id":19026509,"title":"Laguju TV 1318 Tôi muốn có một cuộc phiêu lưu trước đám cưới... Do những cảm xúc tình dục của tôi dành cho bạn trai, Shiki Akane 259LUXU-1335-C","lastmod":"2025-03-27","duration":"01:11:55","url":"/play/19026509.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvMzBmNGVmZGNhYzFhNjEwNjA4MDM1MzdkNjViZDg2YTguanBn.cache","vod_id":19153286,"title":"Cô nàng massage ngực khủng cỡ G săn lùng \"của quý\" của khách hàng! Một chiếc dương vật giả lôi kéo cô đến với thế giới khoái lạc khác – một cô gái massage dâm đãng tên là Riisa Kisaragi.","lastmod":"2026-04-14","duration":"02:05:31","url":"/play/19153286.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA1MjcvYmY5MDgzOWEyYWE5OTkzYjU1NjljODhhNmEzZDdiNzIuanBn.cache","vod_id":19035331,"title":"HMN371IQ140! Thông minh, trẻ trung, quyến rũ, trí tuệ, dáng người mảnh mai, sinh viên quay lại trường, lần đầu tiên trải nghiệm xuất tinh nguyên thủy.","lastmod":"2025-05-27","duration":"02:30:48","url":"/play/19035331.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZDZjMWFmMzFmZjJmZDhkNzdlYzI0ZWM5MDI5YjRkMmMuanBn.cache","vod_id":18994049,"title":"SIRO-3886 [Lần Quay Đầu Tiên] Ứng Dụng AV Trực Tuyến → Trải Nghiệm Quay Phim AV 1016 Một cô gái chưa từng chụp ảnh tự sướng với bạn trai trước đây đang rất hồi hộp về lần quay phim đầu tiên! Một cô gái xinh đẹp cao 170cm với đôi chân thon dài, những cử động hơi vụng về của cô ấy tạo nên một sự tương phản quyến rũ! 1","lastmod":"2025-12-14","duration":"57:38","url":"/play/18994049.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA0MTgvMTIzMWRjMGZmM2ZhMzI5ODljYmU0MWI1NGQ1YjU2ZjEuanBn.cache","vod_id":19029811,"title":"Nữ thủ lĩnh độc ác thức tỉnh sức mạnh của mình trong tập đầu tiên.","lastmod":"2025-04-18","duration":"29:49","url":"/play/19029811.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly9hLjE1NTEyMTAudG9wLzIwMjUxMjAyL3AyVVpuV05yLzEuanBn.cache","vod_id":19065895,"title":"Sau khi cạo sạch lông vùng kín của anh chàng đẹp trai, cô bắt đầu quan hệ tình dục với dương vật to lớn của anh ta.","lastmod":"2025-12-14","duration":"18:37","url":"/play/19065895.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNTFjMjBhYmU4NzliOTYxODFlMzU3NzM1OTgyODhmYTkuanBn.cache","vod_id":18945082,"title":"NHDTA-575 Một nữ sinh bị quấy rối tình dục đã từ chối thừa nhận mình có những cảm xúc đó cho đến tận phút cuối cùng, và bị ép phải đạt cực khoái hết lần này đến lần khác; cơn co giật của cô ấy không bao giờ ngừng lại.","lastmod":"2025-03-22","duration":"03:21:59","url":"/play/18945082.html"}]},
videoTitle: 'Tokyo Hot th101-000-111326 Anna CANDY GIRL - Cạo lông vùng kín, lần đầu tiên được thưởng thức món bánh kem!',
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=/`;
}
};
}