Un mannequin d'une beauté époustouflante, mesurant 1,72 m, avec de longues jambes fines et blondes. À voir absolument pour sa silhouette incroyable et sa personnalité douce et charmante.","lastmod":"2026-07-11","duration":"39:27","url":"/play/19154558.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZTE0YzRkYjBmZGFiMjE4ODViNTRiN2VjZTg2NWUxZTkuanBn.cache","vod_id":19140677,"title":"Un riche héritier avait organisé une rencontre en ligne avec une étudiante sublime, chez lui, pour un moment intime. Contre toute attente, la jeune femme était si douée qu'elle lui procura un plaisir intense, et elle gémissait sans cesse durant l'acte.","lastmod":"2026-05-02","duration":"05:25","url":"/play/19140677.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvYTI2YjE4MGQ4MjIwNDBlNzE2NTc1ZTljNmNkZmYxYmYuanBn.cache","vod_id":19134341,"title":"La série « Top Scholar » met en scène de superbes femmes mûres aux silhouettes et au charme exceptionnels. Leurs pulls et jeans moulants soulignent leurs courbes, et leurs longues jambes sont incroyablement sexy. (Le texte évoque également des vêtements érotiques et des rapports sexuels vigoureux.)","lastmod":"2026-04-01","duration":"01:18:55","url":"/play/19134341.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNjM4ZjJhZjE0ODZkYjIyMTMyYjJkYTNjNTVmOTZjZmUuanBn.cache","vod_id":19036933,"title":"[Top 3 national] Jeune fille douce et mignonne en salopette en jean, flirtant sur le canapé, puis jouant au lit, silhouette mince, léchage, poussées et baise hardcore.","lastmod":"2025-03-29","duration":"01:01:37","url":"/play/19036933.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA2MjcvNDI1MmM0YTIwZDZmYjlkZGExYTNjMDdiNDg4NmQwODQuanBn.cache","vod_id":19151917,"title":"Images haute définition d'une caméra cachée dans la salle de bain d'un appartement loué ; les images montrent plusieurs femmes séduisantes filmées à travers un trou dans la paroi de la salle de bain.","lastmod":"2026-06-26","duration":"01:25:09","url":"/play/19151917.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA4MDIvOGYyNGE0OTJkNzllYzM1MWVlOGQyNDkwYjJiZDVjNmYuanBn.cache","vod_id":19087332,"title":"Déesse et célébrité d'internet de haut niveau - jambes magnifiques et invincibles, bas noirs, grand écart, masturbation passionnée et mouvements de va-et-vient.","lastmod":"2025-08-01","duration":"25:26","url":"/play/19087332.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvYjBmMmRjYWJiZDU0YWY0NWZlNWVmYzdhZGE2OTA3MmIuanBn.cache","vod_id":19141968,"title":"Le cadeau de Noël de LonelyMeow : séduction en bas noirs sexy, masturbation avec un gros pénis suivie d’une pénétration brutale par le vrai pénis d’un étranger, plaquée sur la table et éjaculant sauvagement.","lastmod":"2026-05-08","duration":"17:36","url":"/play/19141968.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMTMvYmZiMzdiYWQ3Zjk4NTE2NDA2ZDgxNzEwNmQ2YzZjMjEuanBn.cache","vod_id":19107710,"title":"La déesse plantureuse de JVID, Xiangfei, dans le rôle de la chatte sexy « Repaying Kindness », les jambes écartées, offre des caresses tendres et séduisantes jusqu'à l'orgasme (audio original).","lastmod":"2025-12-13","duration":"10:48","url":"/play/19107710.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA4MDgvNGVjZTEwY2M3MzE0MjU4MzVjOGQ5NzZkN2E0NjNiOTAuanBn.cache","vod_id":19088508,"title":"Une déesse chinoise à neuf têtes, d'une beauté époustouflante et d'une sensualité envoûtante, au maquillage exquis, écarte ses longues jambes fines pour révéler sa vulve lisse et tendre et filme une relation sexuelle passionnée avec son petit ami.","lastmod":"2025-08-07","duration":"39:32","url":"/play/19088508.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvODZlYmQ2OGM1NTQ1NWM2MGIyMDEzODNiMWNhNDQ3MjkuanBn.cache","vod_id":19131089,"title":"DKWA-001 - Fuite : Un homme tente de séduire une charmante et compétente masseuse dans un salon d'aromathérapie haut de gamme et réputé, mais n'arrive pas à avoir de relations sexuelles avec elle. - cd1","lastmod":"2026-03-16","duration":"56:56","url":"/play/19131089.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYmEyZmQ5ZjdjZjcwN2EyMWVkZGM0YzEwN2RiZDFjYWMuanBn.cache","vod_id":18990706,"title":"Cette déesse aux seins généreux vous comblera de bonheur, vous n'aurez plus envie de partir. FC2PPV-1574094","lastmod":"2025-03-28","duration":"41:22","url":"/play/18990706.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMGRlNGE1N2U3NDFhMWUyNzFmYTNmOWFlZTA2NmU5OTEuanBn.cache","vod_id":18959876,"title":"Une beauté de premier ordre, dotée d'un physique époustouflant et de longues jambes, mesurant 168 cm, chevauchant un marteau-piqueur pour des rapports sexuels intenses.","lastmod":"2025-03-28","duration":"36:30","url":"/play/18959876.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA4MTQvZmY1MGUxM2ViZjFkODdlNjcyYzI1OWFjN2M1MmM2MDQuanBn.cache","vod_id":19089818,"title":"Des vidéos de danse séduisante et de masturbation explicite de la streameuse Huya Jia Yingwan Xinhao ont fuité.","lastmod":"2025-08-13","duration":"20:25","url":"/play/19089818.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA2MTAvZWM3MjVlZmU4YjMyNGQ1MjdjMzlhMTlmMzUwYWNkMjYuanBn.cache","vod_id":19148467,"title":"Ma cousine se faisait brutalement baiser par mon frère, mais elle gardait le silence et n'osait pas gémir.","lastmod":"2026-06-09","duration":"01:19","url":"/play/19148467.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZmUwODY5ZDRlYjQwZTRlM2YxZmQ4MDkzNGEwMmQxZjcuanBn.cache","vod_id":19119085,"title":"Il avait rendez-vous avec la reine de la fac, et son regard était tellement envoûtant ! Quel contraste avec son comportement en public !","lastmod":"2026-01-17","duration":"01:12","url":"/play/19119085.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvODU5N2M5ODE2MTYwNjM2M2M2NmU5NTAxYzBiZTRlMGUuanBn.cache","vod_id":19010415,"title":"Hôtel thermal de grande valeur et de qualité supérieure 04-♨️, rapports sexuels non protégés avec un ventilateur♨️ Tellement bon qu'elle a été baisée jusqu'à ce qu'elle gicle.","lastmod":"2025-03-28","duration":"05:37","url":"/play/19010415.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZTEzZDc5ZjhhY2VlNmU3ODRmMjNjYTQyZDZlNzg4ZmUuanBn.cache","vod_id":19117975,"title":"L'hôtel des fleurs de l'Empereur : L'apparence d'une célébrité, une jeune femme douce des années 2000 avec de longues jambes, une forte poitrine et une taille fine - Un acte de garce contrasté","lastmod":"2026-01-12","duration":"47:04","url":"/play/19117975.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZGQ2MzNmYTdmMWMzOTdlNjIwNGIzNTUxZDY2OWU4YWEuanBn.cache","vod_id":19005895,"title":"Un photographe affronte un mannequin de haut niveau et très sexy.","lastmod":"2025-03-28","duration":"21:17","url":"/play/19005895.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNzg4YWJjZDg3NmFlYmQ4MmY5YzQ4MTg5MDNjMDQzMTMuanBn.cache","vod_id":19139729,"title":"La reine/déesse chinoise du streaming en direct dévoile son visage tout au long d'une performance passionnée","lastmod":"2026-04-27","duration":"01:40:18","url":"/play/19139729.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTExMDYvYmYxZmE1MzYyMDFkNjA1ZTlkMmZiMmI2OWU2YThlZjIuanBn.cache","vod_id":19104525,"title":"Une femme vulgaire en bas résille avec de gros seins se fait brutalement baiser par un homme tatoué.","lastmod":"2025-11-05","duration":"33:48","url":"/play/19104525.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTExMDMvMTkyMmI2OTgyNWI3ZmQwZjI1Mjk0MmMyM2VkZDllNmYuanBn.cache","vod_id":19103960,"title":"Deux couettes, talons hauts, bas noirs, forte poitrine, la fille écarte les jambes et se masturbe, séduisant son petit ami pour qu'il la baise fort.","lastmod":"2025-11-02","duration":"02:30:59","url":"/play/19103960.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA5MDUvNzRiNWY4OWQ4OTA5OGE0OWVhMmE4ODM4YTVkNzAzMzMuanBn.cache","vod_id":19093692,"title":"J'ai entamé la conversation avec une femme mûre super sexy qui adore regarder des vidéos pour adultes, et il s'avère qu'elle est une véritable idole gravure !? Sa beauté et sa silhouette sont incroyables ! Et sa libido est débordante ! (Hazuki Mayu NPJS125)","lastmod":"2025-09-04","duration":"02:02:34","url":"/play/19093692.html"}]},
videoTitle: 'Un homme s'est introduit par effraction chez une femme et l'a violée ; elle avait une silhouette et une beauté exceptionnelles.',
language: 'fr',
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('Lien copié !');
}).catch(() => {
// 降级到旧方法
document.execCommand('copy');
alert('Lien copié !');
});
} else {
// 降级到旧方法
document.execCommand('copy');
alert('Lien copié !');
}
}
},
// 切换布局
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=/`;
}
};
}