Người vợ đức hạnh trở thành vật tế thần và nô lệ tình dục. Oishi Saki bị cưỡng hiếp dã man và bị xuất tinh vào bên trong.","lastmod":"2026-07-11","duration":"","url":"/play/19245902.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZTQ0YzY1NmQ5MzJiNzM5OGJiYzJkNDRmNWE5YmVjY2QuanBn.cache","vod_id":19099616,"title":"MAZO-007 Một nữ nghệ sĩ thư pháp mới vào nghề. Một người phụ nữ có vẻ ngoài dịu dàng và phục tùng tự nhiên. Núm vú của cô ấy đã được huấn luyện để trở nên cực kỳ nhạy cảm, và cô ấy uốn éo bộ ngực cỡ G của mình trong tư thế cưỡi ngựa, xoa bóp chúng để đạt cực khoái.","lastmod":"2025-03-29","duration":"01:19:28","url":"/play/19099616.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvMDZhMGI1ZWFhNjAyNjIxYTQ3OWE0YWU4OTMxNzgxN2IuanBn.cache","vod_id":19233804,"title":"Cảnh NTR gây sốc! Cô bạn gái ngực khủng bị chính cha ruột cưỡng hiếp dã man; khu vườn riêng của cô trở thành món đồ chơi tình dục dâm dục.","lastmod":"2026-05-09","duration":"2:16:35","url":"/play/19233804.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA1MTIvMjhkM2E2ZjNjZWRhMWFjNDVkODE2MWRhYTRmODAxZTMuanBn.cache","vod_id":19176382,"title":"Nữ thần hàng đầu Dương Mịch hóa thân thành người phụ nữ dâm đãng: câu chuyện có thật về cuộc truy tìm khoái lạc điên cuồng của cô tại văn phòng với chiếc quần tất đen.","lastmod":"2025-05-12","duration":"07:04","url":"/play/19176382.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvMjJjOTRhM2E4ODkyODRkN2Y5ZTZmM2JlNjcyYjRmNDUuanBn.cache","vod_id":19225274,"title":"MIDA-495 Cô hầu gái ngực khủng Shiraishi Nami bị chủ nhân cưỡng hiếp đến cực khoái và không kiểm soát được bàng quang, âm đạo cô co giật và cầu xin sự thương xót khi hắn xuất tinh vào bên trong cô.","lastmod":"2026-03-30","duration":"2:04:09","url":"/play/19225274.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA3MDUvNTMyODVlZGQ3MjNjY2MwNDY5ZjI3MGVlMWVhYjM0YzQuanBn.cache","vod_id":19243980,"title":"Ham muốn riêng tư 1: Một người phụ nữ đã kết hôn đầy dục vọng có một cuộc tình vụng trộm vào đêm khuya, với bộ ngực đồ sộ bị cưỡng hiếp dã man cho đến khi cô không thể kiểm soát được bàng quang.","lastmod":"2026-07-05","duration":"0:29:45","url":"/play/19243980.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvY2NiZjdhNTUzZTgwZWZiMDM1NWU1MGY5OWRmZWU0Y2QuanBn.cache","vod_id":19084718,"title":"[Phụ đề tiếng Trung] JUQ-163 Bị quyến rũ bởi những lời nói ngọt ngào, anh ta cặp kè với một người phụ nữ đã có chồng cho đến khi phải học lại đại học… Tsumugi Kanara","lastmod":"2025-03-29","duration":"02:03:45","url":"/play/19084718.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvODE5NjZiNGZmMDVhYTVmYTE3MDI5NDBiMWM4YTNlYWMuanBn.cache","vod_id":19088916,"title":"HOMA-125 Tôi và bạn gái cũ đã yêu nhau 7 năm, nhưng do những hiểu lầm, mối quan hệ của chúng tôi dần phai nhạt. Chúng tôi quên đi thời gian đó và đã làm tình nhiều lần để khẳng định lại tình yêu của mình.","lastmod":"2025-03-29","duration":"02:12:37","url":"/play/19088916.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMzgxMzdkZDViOWY4N2I4M2M0MzlkNTgxZDhiOTU2YzAuanBn.cache","vod_id":19088853,"title":"Huấn luyện phát triển hậu môn kiểu J TSM-42, đau bất thường, cực khoái hậu môn","lastmod":"2025-03-29","duration":"02:14:02","url":"/play/19088853.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvN2VlNTIwZjBlMmNmMTU3ODEzMzE1NTYxY2EwZWUxMGYuanBn.cache","vod_id":19217758,"title":"Cơn cuồng loạn cấm kỵ! Đêm sinh nhật của mẹ kế trôi qua trong sự xâm hại dã man, vùng kín nhạy cảm của bà bị mất đi và bà rơi vào cạm bẫy của sự trụy lạc giữa cha mẹ và con cái.","lastmod":"2026-02-15","duration":"0:09:56","url":"/play/19217758.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvMjEzYjE3NDM4ODdkYjRkZDcwODYzYTUzZjY2NDAzNDUuanBn.cache","vod_id":19231446,"title":"Người đẹp Dilraba Dilmurat bị hoán đổi khuôn mặt và bị cưỡng hiếp dã man! Âm đạo dâm đãng của cô bị lấp đầy tinh dịch một cách tàn bạo, và cô xuất tinh không kiểm soát trong lúc lên đỉnh!","lastmod":"2026-04-29","duration":"0:04:50","url":"/play/19231446.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZDcxMzllOWVlYTY4NmJjYzQyNTI5ZjI4NDdjNTRiYmUuanBn.cache","vod_id":19167730,"title":"Sau một tháng kiêng cữ, trong khi bạn gái tôi đi vắng, tôi đã quan hệ tình dục với em gái cô ấy tám lần, xuất tinh vào trong cô ấy mỗi lần, cho đến khi cô ấy có thai.","lastmod":"2025-03-29","duration":"02:36:50","url":"/play/19167730.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA1MjIvNWJiNzA3YjljMjFiNDI1MTg2ZjliNzkyNGY1OGYyNWYuanBn.cache","vod_id":19177585,"title":"Kỷ luật cưỡng bức đối với phụ nữ đã kết hôn—Một vòng luẩn quẩn của sự sỉ nhục và tra tấn","lastmod":"2025-05-22","duration":"29:01","url":"/play/19177585.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvYzU3ODBkYjJlMzAzZWY3ODk0M2QyNmJmN2U2YjAxOGIuanBn.cache","vod_id":19225199,"title":"Một cô gái lẳng lơ trong tất và giày cao gót chủ động cưỡi lên người anh ta; một cô gái ngực phẳng dùng đôi chân mềm mại của mình để điều khiển dương vật nhưng thay vào đó lại bị cưỡng hiếp dã man đến mức không kiểm soát được bàng quang.","lastmod":"2026-03-30","duration":"0:49:04","url":"/play/19225199.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNzVjYjk3YWI1NjAxZThjOGYyMzkxZDMwMTM5ZTc0YmMuanBn.cache","vod_id":19109153,"title":"- [Lần đầu tiên quay phim] [Một người phụ nữ đã kết hôn không có đời sống tình dục và vô đạo đức...] [Cô giáo xinh đẹp] Một người phụ nữ đã kết hôn dịu dàng và xinh đẹp có quan hệ tình dục mãnh liệt với người đàn ông cô vừa mới gặp... Đăng ký trực tuyến → Trải nghiệm quay phim với ông Okukawa, một giáo viên tiểu học 20 tuổi (loạn luân).","lastmod":"2025-03-29","duration":"","url":"/play/19109153.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNDc3NjYzNDYzZTEyMGE0Njc1OGQyNWJiNDk4ODVkMGIuanBn.cache","vod_id":19227907,"title":"POVdreamsCOM - Niềm đam mê điện ảnh bùng nổ: Màn cưỡi ngựa khiêu gợi và xuất tinh lên mặt của \"ngựa cái\" hàng đầu LittleCaprice kết thúc.","lastmod":"2026-04-09","duration":"0:14:37","url":"/play/19227907.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZjZhMmMxNGQ0MDk0YzJjMmNjNDQ5Y2MxYTBhZmJjOWIuanBn.cache","vod_id":19216062,"title":"Vớ đen, mông cong, ngực to, gái hư, đang quan hệ bằng miệng với dương vật to, cưỡi lên trên và hút cạn tinh dịch của bạn trai.","lastmod":"2026-02-05","duration":"2:20:24","url":"/play/19216062.html"}]},
videoTitle: 'HODV21776 Kiêng cữ để tránh thai, gặp lại bạn gái cũ; người phụ nữ đã kết hôn trong tư thế cưỡi ngựa cố gắng lấy tinh dịch; NTR cấm đạt cực khoái.',
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=/`;
}
};
}