Một cô gái xinh đẹp, da trắng, ngoại hình ưa nhìn và không có lông ở vùng kín, có thể là một con hổ trắng. Cô ấy bị một dương vật xâm nhập mạnh mẽ và cưỡi lên nó trong 3 giờ, thay quần áo nhiều lần.
Một chàng trai đẹp trai tán tỉnh một người mẫu cao ráo, xinh đẹp. Cô gái có vẻ ngoài dịu dàng và rất nhạy cảm. Cô ấy hét lên khi bị xâm nhập, khiến người ta có cảm giác như cô ấy đang mất trinh. Chắc hẳn vùng kín của cô ấy rất khít. ...title>","lastmod":"2026-07-11","duration":"04:04","url":"/play/19153545.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYjFmODNlMDhkZDFkNzcwOGU2ODZhMTMwMGY2NGNmNDMuanBn.cache","vod_id":19074779,"title":"Một cô gái ngực khủng bị quay phim lén lút khi đang bị tấn công tình dục bằng dương vật lớn và các đạo cụ khác...","lastmod":"2025-03-19","duration":"08:29","url":"/play/19074779.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA0MDMvOWFhODE3YjNkOGVkM2Q5OTk2ZDJhODQwOTFlN2M5YjcuanBn.cache","vod_id":19098598,"title":"KTRA-701 Cơn cuồng nhiệt 4 giờ của người đẹp ngực phẳng và mảnh mai","lastmod":"2025-04-03","duration":"04:04:09","url":"/play/19098598.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvOWFhMGEwYzVhY2Y2MDQxY2NjZTg4N2YyNTY5YjQ5ZWYuanBn.cache","vod_id":18946629,"title":"Yui Hatano - CD3 Cuộc Thử Thách Người Giả Gái - Phiên Bản Đặc Biệt 3 Giờ ~Săn Trinh Nữ · Đá Trứng · Đi Tiểu · Huấn Luyện Tra Tấn Hậu Môn~","lastmod":"2025-03-19","duration":"42:45","url":"/play/18946629.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYjU1OGExOWRlOWYzN2M3MGFhMmFlMDI3MzNlN2VkMDQuanBn.cache","vod_id":19041506,"title":"EBVR-072 [VR] Khi tôi cởi quần áo của bạn gái đầu tiên... Tôi không thể tưởng tượng nổi cô ấy mặc quần áo, nhưng cô ấy có bộ ngực nhỏ nhắn nhưng lại rất lớn. Tôi đã rất phấn khích - cd3","lastmod":"2025-03-19","duration":"23:43","url":"/play/19041506.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA0MTkvZmExODdmZDJhY2JkMTk2YjM3MzJkYjVjZTM4ODAxNDYuanBn.cache","vod_id":19100816,"title":"Đặc biệt Giáng sinh: Cô giáo siêu thần thánh An An tận hưởng Giáng sinh, các cô gái phục vụ cô, đôi mắt quyến rũ, bộ ngực căng tròn mềm mại và màn đưa dương vật nhanh chóng vào âm đạo dịu dàng của cô.","lastmod":"2025-04-19","duration":"11:54","url":"/play/19100816.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZTAwMTg3MGY4YTVhMGZmNGFhOGUyMWJhZDdlZWRjMjMuanBn.cache","vod_id":19085127,"title":"Người đồng nghiệp nữ đã có chồng của tôi đã lừa tôi đến nhà cô ấy và cưỡng bức tôi. Âm đạo của cô ấy rất sâu và khít; đã lâu lắm rồi tôi chưa được quan hệ với chồng mình. Sau khi tôi bị kích thích, cô ấy đã hợp tác và tôi bị ép xuất tinh vào bên trong cô ấy.","lastmod":"2025-03-19","duration":"00:00:59","url":"/play/19085127.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYjc2MmFjYTk2NTdlMTdhZjE0OWI5MTEzOWNjZWE0NTUuanBn.cache","vod_id":19054533,"title":"SONE-374 Thiên đường vòng một L-cup mềm mại, nhạy cảm của Yuta (3 giờ)","lastmod":"2025-03-19","duration":"02:57:41","url":"/play/19054533.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA0MDMvNzJjMGVmNzM2NTY0NzVlMTQwOWM1MzY2OWJiNzdkYWQuanBn.cache","vod_id":19098253,"title":"JUR-197 Vợ luật sư ngoại tình. \"Cái này dành cho anh...\" người vợ nói, nhưng không ngờ, cô đã bị cuốn hút bởi đám đông đàn ông.","lastmod":"2025-04-03","duration":"02:27:45","url":"/play/19098253.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNjg5MThjMzE0NGQ1OWY2ZDBmOTA2OGFmZmZlNmJmYzEuanBn.cache","vod_id":18959020,"title":"MDTM-819 Gói Massage Trẻ Hóa Sau Giờ Học Mới Của Vẻ Đẹp Dâm Dục - Kỷ Niệm Tuyệt Vời Nhất 4 Giờ Tập 002","lastmod":"2025-03-19","duration":"03:59:27","url":"/play/18959020.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNjFkM2VmOWVlZDg1NjExN2JlODhjZDIzNzJmMjY0MDkuanBn.cache","vod_id":19141303,"title":"SM Domination Queen - San San làm nhục và liếm chân những nô lệ nữ đồng tính, nuốt nước bọt. Con chó cái này cực kỳ xinh đẹp.","lastmod":"2026-03-09","duration":"30:23","url":"/play/19141303.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvODEzMzk3ZmY1Y2Q0YWZmZTIwNmNkMDc0NDg2NWNkM2EuanBn.cache","vod_id":19030403,"title":"Một cô gái quyến rũ với mái tóc trắng dày và bộ ngực lớn đã cho phép tôi chơi đùa với cô ấy trong 39 phút.","lastmod":"2025-03-19","duration":"39:21","url":"/play/19030403.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMjc5YWY0NjJlYWI0Yjg1OTk1YzQwNTc2MmY4MDkzNzMuanBn.cache","vod_id":18943147,"title":"Người mẫu nữ mới, phát trực tiếp không chỉnh sửa, chân thực nhất, tự sướng hoàn toàn khỏa thân, cận cảnh cô ấy dang rộng chân, hoàn toàn trần trụi, với rất nhiều chất dịch màu trắng.","lastmod":"2025-03-19","duration":"41:40","url":"/play/18943147.html"}]},
videoTitle: 'Một cô gái xinh đẹp, da trắng, ngoại hình ưa nhìn và không có lông ở vùng kín, có thể là một con hổ trắng. Cô ấy bị một dương vật xâm nhập mạnh mẽ và cưỡi lên nó trong 3 giờ, thay quần áo nhiều lần.',
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=/`;
}
};
}