Awesome younger brother incestuously rapes his older sister, forcibly rapes her while she's on her period, and makes her pubic hair smoke.Awesome younger brother incestuously rapes his older sister, forcibly rapes his older sister while she's on her period, and makes her pubic hair smoke.","lastmod":"2026-07-11","duration":"25:33","url":"/play/19154489.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEwMDIvMDhiMmMzN2NlMDcwMzY1M2RkNTFhNjJhOTM2NWMzMTQuanBn.cache","vod_id":19098485,"title":"The scandal involving a half-Chinese, half-Japanese student and a celebrity whose appearance is so contrasting that a video of her was leaked.","lastmod":"2025-10-01","duration":"23:16","url":"/play/19098485.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvMWNhN2NhODM1YTlhZjg4YzAxYTg2MjI1MGIyYTQzZjcuanBn.cache","vod_id":19117237,"title":"This text is a series of explicit sexual content featuring a male athlete who is sexually assaulted by a woman. The content includes scenes of the athlete having sex with older women, including a character with a powerful penis and a \"golden finger\" ability that allows him to make each woman squirt. The text describes how the male athlete's penis is inserted directly into the woman during her orgasm, causing her to scream with pleasure.","lastmod":"2026-01-09","duration":"13:30","url":"/play/19117237.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMWU5YWU0ODU4ODdjYmYzNmRkNTI3MGYwNjBkNzJlMzMuanBn.cache","vod_id":19021426,"title":"I chatted with a pretty, elegant young woman for a week and finally arranged to meet her at a hotel for sex. Her vagina was so sensitive that she squirted right after we started having sex, so I secretly took off the condom and continued!","lastmod":"2025-03-29","duration":"29:40","url":"/play/19021426.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNzQ3YjMzMjJhODg2NDA3ODA1ZWMwMjY5MTNiYTI0YzguanBn.cache","vod_id":19136677,"title":"Amateur girl's first erotic ass dildo masturbation 4","lastmod":"2026-04-13","duration":"02:37:01","url":"/play/19136677.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA5MDUvOGVjYjAyZDIyMTJiMjg1MWM1YzIyYmM1MjQ1YzcyNTkuanBn.cache","vod_id":19093599,"title":"Yangyang, a bespectacled international student from Shanghai, exposes himself masturbating.","lastmod":"2025-09-04","duration":"48:32","url":"/play/19093599.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA5MTUvY2E3NTlhMGQ4NzExMjNjYjc1MjE2MTk2NGVkZjJlYmEuanBn.cache","vod_id":19095574,"title":"Internet celebrity CC live streamer goddess's latest customized large-scale pink hole welfare","lastmod":"2025-09-14","duration":"28:29","url":"/play/19095574.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZmZlNDY3ODM3Y2VlOGE4NjQ1NGZhZTM4YTU2MWMzN2YuanBn.cache","vod_id":19010423,"title":"High-value, top-quality content 05 - Face and nipple exposed, uncensored, trying popping candy oral sex in the same frame, fans are thrilled and fall in love.","lastmod":"2025-03-28","duration":"03:39","url":"/play/19010423.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvODE3ZDI4MjY2YzExYmFhZTQ4NGRhODYzMDVlNTNjY2YuanBn.cache","vod_id":19065990,"title":"New arrivals! Top-quality Jade Girl Collection Part 2 - High-value, beautiful breasts and curvy buttocks, showcasing a stunning split with props~ C-cup~ dripping wet, so beautiful!","lastmod":"2025-03-29","duration":"01:41:29","url":"/play/19065990.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA4MzAvZDc0NGI5MWNkYzE2NDIyNjEyZjA2MjU3YmQwNTc1NWUuanBn.cache","vod_id":19092560,"title":"4P Show: Older sister and younger sister are being fucked by two big dicks; the younger sister looks very shy.","lastmod":"2025-08-29","duration":"10:19","url":"/play/19092560.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNzJmOWQzYjlkZTgyMDQ5OGM5NzZjODliNjFhODk4YzguanBn.cache","vod_id":19117869,"title":"A bespectacled man was caught stealing money from a high-value, busty woman at a hotel. After ejaculating, he tried to steal her money but was discovered. The full video has been leaked.","lastmod":"2026-01-12","duration":"01:07:38","url":"/play/19117869.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYWQ5OTBmODg4M2U4ZjhiYTI5ODdiZWFmNzhjNDc1YWMuanBn.cache","vod_id":19047497,"title":"NHDTB928 Even when her parents are present, she secretly masturbates under her skirt. A lewd girl indulging in masturbation with her fingers everywhere.","lastmod":"2025-03-29","duration":"03:14:55","url":"/play/19047497.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYTc3ZjE2YjkyZWM3ZTcyMWYxODg3MDBlM2NlOTgwZjAuanBn.cache","vod_id":18974836,"title":"My sister wants me to fuck her hard.","lastmod":"2025-03-28","duration":"07:09","url":"/play/18974836.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA0MDgvOGZiYjk1N2I1YjgzZTIxZDI1OWEzNjFmZDVhMDQ0OWMuanBn.cache","vod_id":19068930,"title":"For the sake of her older sister, Yuki Takeuchi, whose children were repeatedly assaulted, PRTD-032-C.","lastmod":"2025-04-08","duration":"02:00:57","url":"/play/19068930.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA2MjgvOGVhZDQyMDc2OGI5NmZjMWIwYmE0ODhiNzMxYWM4MzIuanBn.cache","vod_id":19152017,"title":"He approached a popular online streamer, then approached the older man sitting next to him in an internet cafe, and they ended up having sex in the internet cafe's restroom.","lastmod":"2026-06-27","duration":"52:47","url":"/play/19152017.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly9zYnp5dHBpbWc0LmNvbTozNTE5L3VwbG9hZC92b2QvMjAyNjAyMjUtMS8wOTFhODdjYzNlMjg2OGY0ZGY4YjMyNWY1MGZiZjNmZi5qcGc=.cache","vod_id":19126902,"title":"Top-tier goddess hookup, top-tier black stockings, high-value looks, top-tier figure, black stockings, glasses girl, no condom, multiple positions, internal ejaculation.","lastmod":"2026-02-25","duration":"45:25","url":"/play/19126902.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA2MjEvNjQ1ZjM4MThlMGI0NjY1NzIwNDIwNjZjOGQ4N2UwYTQuanBn.cache","vod_id":19079535,"title":"Big leak: A collection of high-quality videos featuring a stunningly beautiful goddess with a surprisingly slutty side.","lastmod":"2025-06-21","duration":"10:31","url":"/play/19079535.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZmY2NTE5ZTc3NWI0NTNkOWRlMGEwNmM0OTE4YTljNzMuanBn.cache","vod_id":19125145,"title":"The extreme contrast between the two is amazing! A high-颜值 (high-appearance) couple in the fitting room, their lovemaking in stockings, foot fetish, and oral sex in front of the mirror is so exciting!","lastmod":"2026-02-17","duration":"05:49","url":"/play/19125145.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNzJkMDA0NmIzNDNmOTBhZTBhYzg1ZTE2NDA3YmI4NTQuanBn.cache","vod_id":18969776,"title":"IPX-231 I absolutely love my older sister's protruding butt and the temptation of internal ejaculation. Nishimiya Yume","lastmod":"2025-03-28","duration":"02:31:20","url":"/play/18969776.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA3MjcvMTY4N2I3MGI4ZDhlYmUwOGU5ZDc4NjU3MTZiMGIzNTAuanBn.cache","vod_id":19086139,"title":"OKAX988's service is non-stop! \"I want to lick your lower body with all my heart.\"","lastmod":"2025-07-26","duration":"04:00:12","url":"/play/19086139.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZDY2ZjA0MzcwNTQxNTdlNTIyYTJkZmJhYjYyZDIwMjguanBn.cache","vod_id":19034271,"title":"A woman who masturbates and urinates in front of a fixed camera.","lastmod":"2025-03-29","duration":"01:55:13","url":"/play/19034271.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNGIyZTNkODJiM2Y1OWQ3NmUzZmVhMzdjMzM5YWNhMGMuanBn.cache","vod_id":19016410,"title":"A stunningly beautiful secretary from a foreign company had sex with a senior executive in a hotel after get off work and took selfies.","lastmod":"2025-03-29","duration":"24:41","url":"/play/19016410.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvODFkM2E2NzA4Y2I4MWJkNDU4ZTUyMzIyMzYwYjBjY2EuanBn.cache","vod_id":19133323,"title":"Lin Yan MDX0243 Kaguya-sama: Love Is War","lastmod":"2026-03-27","duration":"35:30","url":"/play/19133323.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMjBlNGE1NDE3ODE0OWU3OGI4NWE1NGNlODc0OTY5OTkuanBn.cache","vod_id":18961216,"title":"My slutty older sister was my sex education teacher","lastmod":"2025-03-28","duration":"29:08","url":"/play/18961216.html"}]},
videoTitle: 'The live streamer showed off a beautiful young woman masturbating.',
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=/`;
}
};
}