Liaoning University of Finance and Economics' contrasting slut Zhang Yuehan and her boyfriend's sex video exposed. 01. Cute and pretty female college student was...","lastmod":"2026-07-11","duration":"","url":"/play/19207141.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvOTRlMjc5ZjY2MmIxMGUzOWQ3ZDVhN2QwNWRjYjkwZmIuanBn.cache","vod_id":19065089,"title":"Japanese sports massage turns into passionate sex","lastmod":"2025-03-26","duration":"0:19:24","url":"/play/19065089.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTExMDIvNDZmZjQ2ZmNiMWNkNWJmOThmN2Y0YTYyOTNmY2EwOGYuanBn.cache","vod_id":19162071,"title":"Amateur male and female surveillance AV: Boss and subordinate share a hotel room during a business trip! A nervous new employee's first business trip involves an unknown actor, SKMJ_553.","lastmod":"2025-11-01","duration":"4:04:31","url":"/play/19162071.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNmZiN2ZkZTgzMjU5Mzc3MjM0NzA1ODBlYjdkZmI4YmIuanBn.cache","vod_id":19197945,"title":"Short-haired auntie's lewd and horny pussy, top-notch oral sex skills, ultimate experience","lastmod":"2026-05-10","duration":"0:00:51","url":"/play/19197945.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly9zYnp5dHBpbWc0LmNvbTozNTE5L3VwbG9hZC92b2QvMjAyNjAyMjUtMS9mNWQyNGI2MzNjYjUxZjYwZGYyODNkYmZhYzJhMTBkZC5qcGc=.cache","vod_id":19182751,"title":"A seemingly sleazy, high-class, intellectually attractive woman was sexually assaulted at home by a wealthy, unattractive man from Hangzhou who was actually a \"goddess with a sleazy appearance.\"","lastmod":"2026-02-25","duration":"0:16:05","url":"/play/19182751.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNWU2ZDZlNTAwOTc3ZDQzMWNlOTJmMTc0ZDExMTA0NGMuanBn.cache","vod_id":19073017,"title":"MAD-015_Gone with the Wind Chapter 2_The Whispering Wind and Cranes Private Sex Website - Han Yiren","lastmod":"2025-03-26","duration":"0:28:57","url":"/play/19073017.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvYjc3OTUxMzkxNWE5MDA2YTNkOTIyNDhjOGJhOGMyYjMuanBn.cache","vod_id":19187193,"title":"Internet celebrity's private sex videos leaked on adult platform - riding sex - kneeling and licking on stairs - playing with vagina on sofa","lastmod":"2026-03-18","duration":"0:10:09","url":"/play/19187193.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvOGQ4Y2RlYzhjMWEwNDJkM2Y5NzAyYjZmYzY0NWMzMTYuanBn.cache","vod_id":19044917,"title":"ONEZ-186 After the last train, in a hotel room. Hiding from his wife, he had sex with his cute subordinate until morning. Vol.001 Honda Azusa","lastmod":"2025-03-26","duration":"1:44:14","url":"/play/19044917.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYWQ0MWUwZTQwYjhlMzUxMTI2ZTczNjUwODA1ZDY3OWMuanBn.cache","vod_id":19050316,"title":"HUNTA-702 \"I don't know if I'm getting an erection...\" My childhood friend, with her large breasts and average looks, who lacks confidence in herself, comes to me for erotic counseling! Come to my room.","lastmod":"2025-03-26","duration":"3:44:32","url":"/play/19050316.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvM2IwOTI2ZTcxYzlhYzNmNmIzMGU3MjJlMTc1MGMxMzMuanBn.cache","vod_id":19070177,"title":"A fair-skinned, tall young woman, completely naked, close-up shots of her vagina with props inserted, engaging in masturbation...","lastmod":"2025-03-26","duration":"0:42:57","url":"/play/19070177.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZTVlM2FiOWI1YzM2MWU1NjE5ZjEwZGYzZWM2OGE2ZTguanBn.cache","vod_id":19076555,"title":"SONE216 Bodily fluids intertwine, intense sex. A girl becomes a woman, greedily devouring a man in completely uncircumcised intercourse.","lastmod":"2025-03-26","duration":"2:10:25","url":"/play/19076555.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly9zYnp5dHBpbWc0LmNvbTozNTE5L3VwbG9hZC92b2QvMjAyNjAyMjQtMS8yZmJmNTk0YTM1MjAzMjlmNmQ0ZjkzMmQxZGFkZWUzZC5qcGc=.cache","vod_id":19182551,"title":"A captivating story of a slutty female boss's sexual journey.","lastmod":"2026-02-24","duration":"0:22:24","url":"/play/19182551.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNGIzODkwODc4ZWU1NGZlZDM4ZDNlNWVhZjIxMWE4OTAuanBn.cache","vod_id":19124527,"title":"IPX131 The ultimate pleasure of nipple kneading sex. After a week of abstinence, the nipples were wildly trained for 2 hours and 20 minutes, ultimately resulting in a playful and broken expression. Nishimiya Yume.","lastmod":"2025-03-26","duration":"2:21:06","url":"/play/19124527.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYWRiNmEyMTFmMzBlNzViZmJmYjg4MGI2NDg2ODUwMmEuanBn.cache","vod_id":19128769,"title":"From PM700 check-in to AM700 check-out, the last night of the affair, W, the adulterous Ōsakura Masa, Ōsakura Mana, STARS-730-C.","lastmod":"2025-03-26","duration":"1:40:11","url":"/play/19128769.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvOGE5OWJjYzcxZDAzNzg3Y2NkZmEzNjVjMGQzZWYyMzUuanBn.cache","vod_id":19118085,"title":"GANA2137 Poolside transfer 27 Spotted a beautiful woman in a swimsuit at a popular night pool! A strange man kept bothering me, telling me it was a suite, but it turned out to be a very ordinary room with a monotonous night view... I had completely lost my libido, but after drinking, I couldn't suppress my desires, abandoned my colleagues, and started having sex!!","lastmod":"2025-03-26","duration":"1:27:51","url":"/play/19118085.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvM2Y0Zjk0MDk1ZDVhNzMxMDhlN2I0MDFkNzdmMGRlYzIuanBn.cache","vod_id":19064644,"title":"Korean sex scenes 268","lastmod":"2025-03-26","duration":"0:42:31","url":"/play/19064644.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvOGJlN2VhZTlhZDI5M2NiNGNlMGZjMTI3ZWI5MDQ4MjcuanBn.cache","vod_id":19055271,"title":"[Original Release] This 28-year-old woman from Canada once unwisely fled the cold Quebec City and ventured into the hot South of France.","lastmod":"2025-03-26","duration":"0:47:50","url":"/play/19055271.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYzE0ZmNkOThkNTg5ODZiZDAyYzUwOWFhOTY0OTI5NWUuanBn.cache","vod_id":19072581,"title":"[Top-tier G-cup] Sweet young lady, wet and seductive in the bathroom, sitting on the toilet kneading her breasts, her amazing big breasts are so tempting to squeeze, her legs spread open and her hairless pink vulva.","lastmod":"2025-03-26","duration":"0:30:44","url":"/play/19072581.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNzZmYWM1MzRlNjAzZmU3MDRkY2E1OTA4ZjhkNTZkNDYuanBn.cache","vod_id":19114169,"title":"The Private Sex Life of a Beautiful Office Lady 1","lastmod":"2025-03-26","duration":"0:06:51","url":"/play/19114169.html"}]},
videoTitle: '91 Rich second-generation guy hooks up with a hostess at a club in his mansion who's good at oral sex. The room even has a sex chair.',
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=/`;
}
};
}