Married Woman's \"Selfie\" NTR Are You Watching...? Yukari (39 years old) MERCURY","lastmod":"2026-07-11","duration":"02:00:11","url":"/play/19161891.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvOGRlMDgwYmQ5ZGE4ZTQ3N2I4YmRkYWRiZWY1NTY5ZTEuanBn.cache","vod_id":19140362,"title":"Black Rose Sexy Beauty","lastmod":"2026-01-26","duration":"01:58:13","url":"/play/19140362.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvN2ZlMmZkZGQxMjY4MGQ3ZjA4OTg3NTMzNTU1ZjdlOGQuanBn.cache","vod_id":19024029,"title":"A sexy, mature woman, 180cm tall! Wearing a bodysuit and fishnet stockings, she's having sex with a guy with a huge dick! She's grabbing his big cock and sucking it hard, she loves being fucked from behind, and her expressions during sex are very lewd.","lastmod":"2025-03-24","duration":"01:11:55","url":"/play/19024029.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYTAwODg0NmI4NjIyYjRjMjBkNTlkOTJkMWZkODJmZTguanBn.cache","vod_id":18984232,"title":"406FTK-006 The black pantyhose worn by the female office worker without makeup are so sexy! I'm cautious about office sex, but I want to have sex with an office lady wearing pantyhose.","lastmod":"2025-03-23","duration":"02:04:57","url":"/play/18984232.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvOWY0MzYwZjI5MGIwNDE4MGJmOGVlM2RjNGQyMjVhOWMuanBn.cache","vod_id":18924483,"title":"A young man nicknamed \"Tao Jing Sui Yue\" arranged a threesome with two Shenzhen models at a hotel. The two beauties took turns having sex, and his one penis couldn't handle it all. Truly blissful!","lastmod":"2025-12-14","duration":"00:44:51","url":"/play/18924483.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvOTBlZGQ5MDgwNmVkNWJhOTIzZDI3MzIwZmIzOWJmMGEuanBn.cache","vod_id":18974661,"title":"The company's mature female accountant had a threesome with two bosses in a hotel room.","lastmod":"2025-12-14","duration":"00:06:07","url":"/play/18974661.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMGQ2Y2Q3NDFhZjUyN2FhYTM0NjExMDdkZTE1YjFmZTUuanBn.cache","vod_id":18960468,"title":"TIKB-042 tells the story of a sexy, petite, cute, and playful girl who is drugged by an older man and transformed into a lewd goddess who uses her facial expressions to beg for pregnancy.","lastmod":"2025-12-14","duration":"02:00:57","url":"/play/18960468.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZmFmNjliNzUwYzdhYzJmNTM3MTIyNmViZTViNDgzNjMuanBn.cache","vod_id":18936764,"title":"A hotel hookup with a seemingly innocent, virtuous college girl, resembling Shu Chang with a great figure, but unfortunately, she forgot to take her medication and ejaculated after only a few thrusts.","lastmod":"2025-12-14","duration":"00:09:42","url":"/play/18936764.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA1MDYvZDM4YTBiYTI4YmRjY2Q4NzIyMDBhY2QwZjg0MGEzMTUuanBn.cache","vod_id":19032365,"title":"200GANA-2939 A serious softcore shoot, my first time filming. In 1985, I took a show-off lady to a hotel! As expected, humble...","lastmod":"2025-05-06","duration":"01:18:21","url":"/play/19032365.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNjA5ZGZjNzI0ZTI4ZDgyZTZmZmM0MDIyNmZlODZkYmUuanBn.cache","vod_id":18988361,"title":"HUNTA-688 I'm the only man in a shared apartment full of women in their 30s! Once you have sex with a woman, it's all over! The chain reaction of arousal continues until my sperm runs dry...","lastmod":"2025-03-23","duration":"03:27:41","url":"/play/18988361.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNzI1OTdiYjUyNzMzODNmN2YzYTYzMjJmZjRhNjUxNWEuanBn.cache","vod_id":18956279,"title":"[4K]CEMD-283 ~A Woman Indulging in Sexual Desire~ Sex Donna Takase Rina Super Erotic 4SEX","lastmod":"2025-12-14","duration":"03:12:40","url":"/play/18956279.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYWE3NjE5ZDM0N2RiNmRiMjFiODgyMjU4NmQ0NDI0YjQuanBn.cache","vod_id":18970114,"title":"[Chinese Subtitles] HMN-352 A 20-year-old girl's first time. Experiencing raw, creamy sex in a secluded hotel room - Honoka Hashima","lastmod":"2025-12-14","duration":"02:28:16","url":"/play/18970114.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNjM5YjkyNzk5YmExOTkwZjgxMjRhZTYyNmEzNGQwY2YuanBn.cache","vod_id":18935736,"title":"Chinese adult video featuring a sexy, long-legged female teacher named Nana, who commits suicide due to long-term depression, is sexually assaulted by a perverted bald man.","lastmod":"2025-03-22","duration":"00:37:45","url":"/play/18935736.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYWE4OTY0NDcwMDQxNjM5ODEyMzQyZTEwYmQ0NTAzODQuanBn.cache","vod_id":18963833,"title":"FC2PPV 3196320 ★Bonus Uncensored Vaginal View☆♀61 A cute and rumored supermarket clerk serves customers with her sexy breasts and thick pubic hair.","lastmod":"2025-12-14","duration":"01:26:32","url":"/play/18963833.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNzYyZWUwOGRlYjZlYzVmMjA5ODIxYmJkNmU0NjJjMzMuanBn.cache","vod_id":19012789,"title":"MMB278 Working girl's tight vagina is deceived and internally ejaculated ~ A woman who is good at her job has a super tight vagina.","lastmod":"2025-03-24","duration":"01:50:20","url":"/play/19012789.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNDJlZjhkMmJmMGE0MDgwNjdiZDY0MWY5ZjBmMDEwZTIuanBn.cache","vod_id":18968878,"title":"FC2PPV 3241733 *Smartphone Angle* 18 years old! Suzu-chan is undergoing nursing intern training! Despite having an anime-like voice and a baby face, this intern nurse is already super sexy ♥ Nursing School","lastmod":"2025-03-23","duration":"00:46:13","url":"/play/18968878.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMTlkNGRmMzhhZTIyNGQzNzJkMjMwZjRlMGJlZmRlODguanBn.cache","vod_id":18968451,"title":"EVIS-404 A perverted woman obsessed with her body odor inserts her nose into her vagina and sucks on her man's semen. She sniffs and licks the smell of her sweat, vagina, and anus.","lastmod":"2025-03-23","duration":"02:16:07","url":"/play/18968451.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNjk0ODAxMzRiMDE4ZjBlYzNlOGUzMmMzMzhjYWM1YzkuanBn.cache","vod_id":19005164,"title":"JUFE-485-C A beautiful married woman's sticky, sweet kisses and luxurious lingerie sex. My sister-in-law, who lives in the city, seduces me, who grew up in the countryside.","lastmod":"2025-03-23","duration":"02:27:53","url":"/play/19005164.html"}]},
videoTitle: 'IPZZ-017 Taking a cute and sexy junior office lady back to the hotel... I was defeated by this exaggeratedly "irresistible woman." (Nishimiya's Dream)',
language: 'en',
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('Link copied!');
}).catch(() => {
// 降级到旧方法
document.execCommand('copy');
alert('Link copied!');
});
} else {
// 降级到旧方法
document.execCommand('copy');
alert('Link copied!');
}
}
},
// 切换布局
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=/`;
}
};
}