Voyage de noces américain de Wu Mengmeng_San Francisco Vulgar Bitch Shameful Exposure Unprotected Cumshot","lastmod":"2026-07-11","duration":"25:35","url":"/play/19153785.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMTMvMzQ4OTlkMDM5ZTYxNzkxMDE2ZjY4MjZkMDBhNmEzMmYuanBn.cache","vod_id":19110425,"title":"FrankieBunnie : Ma première sextape","lastmod":"2025-12-13","duration":"22:06","url":"/play/19110425.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvOGM5NGE2YmQxOTFmYmFlZmY3NzJiYzE2ZmNmOWZlMWYuanBn.cache","vod_id":19131518,"title":"Des informations divulguées révèlent qu'une étudiante et un conseiller entretenaient une liaison dans une chambre d'hôtel ; le conseiller aurait attiré une jeune fille en jouant à des jeux vidéo et en répondant à des appels téléphoniques.","lastmod":"2026-03-18","duration":"38:35","url":"/play/19131518.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZjllZGI3NjIxODI5YzM5YjBkMjcyZTFhOTE1Zjk2MzEuanBn.cache","vod_id":19136199,"title":"Le troisième meilleur étudiant de sa promotion alla à un rendez-vous avec une jeune femme en robe longue. Sa peau pure et claire et ses soins raffinés valaient largement leur prix. Elle était douce et obéissante, et ils eurent des rapports sexuels rapides et vigoureux.","lastmod":"2026-04-10","duration":"22:50","url":"/play/19136199.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMzdkMTI4NTlkYmRhMjc2ZDdkNjdmYzEyMjE1ODRmZTguanBn.cache","vod_id":19047403,"title":"Un petit ami solitaire organise une rencontre dans un hôtel.","lastmod":"2025-03-29","duration":"45:46","url":"/play/19047403.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZDcyZGNlYTU0MmVmZWMzNTdjZjAwNTY2NTcyMDkzZjAuanBn.cache","vod_id":18979244,"title":"Sexe séduisant avec une jeune fille salope","lastmod":"2025-03-28","duration":"01:35:53","url":"/play/18979244.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMDc3MDUzNzAyZTI2Nzc1ZmRiODQ2NmRmZjc3OGVjNWUuanBn.cache","vod_id":19006267,"title":"retour sexuel de l'ex-petite amie salope 1","lastmod":"2025-03-28","duration":"30:40","url":"/play/19006267.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA1MTMvNTY4OWVkYmExYmFhMzYyZjRhMzE1MTA1YjViMjUxYTIuanBn.cache","vod_id":19073408,"title":"Préparez des mouchoirs. Anna Bao'er, rencontre à l'hôtel, chambre payante, sans préservatif, éjaculation interne, éjaculation à sec - 2","lastmod":"2025-05-13","duration":"54:30","url":"/play/19073408.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNGNjZWVlYmNlOGYyZTQ0OWI2MzAwYTliNDBjZTczMzYuanBn.cache","vod_id":18991401,"title":"Le détective Duck Bro avait organisé une rencontre sexuelle avec une jeune femme séduisante et ravissante, vêtue de noir. Il portait des talons hauts, a écarté les jambes et l'a pénétrée vigoureusement jusqu'à ce qu'elle atteigne l'orgasme et éjacule à plusieurs reprises.","lastmod":"2025-03-28","duration":"01:37:05","url":"/play/18991401.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNzBkZTFiNDk2MGFlNWNlYjAxNjhlZjdmOGIyNGJiN2YuanBn.cache","vod_id":19040409,"title":"Le sexe vraiment dangereux, partie 4 - Édition spéciale ! 30 personnes qui dansent pendant 5 heures ! Avec Alice Oto, Mihina Nagai, Reiko Kobayakawa et d'autres.","lastmod":"2025-03-29","duration":"05:01:52","url":"/play/19040409.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvODhlNWMxMTdiODMwNDMzMTEyMjFiYjljZTI1ZDBjNDkuanBn.cache","vod_id":19132673,"title":"Une photo selfie divulguée a révélé qu'une collègue, portant des bas noirs et ayant une relation sexuelle occasionnelle, a utilisé un vibromasseur pour jouir.","lastmod":"2026-03-24","duration":"20:33","url":"/play/19132673.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNTc4OWIwMmM4MzhlNjc3M2EyMDZkY2U1ODljYzZjYTguanBn.cache","vod_id":19064251,"title":"MIDV354C Je suis professeur principal. Je n'ai pas pu résister à la tentation de mon élève et, finalement, après les cours, j'ai eu des relations sexuelles répétées avec elle dans un love hôtel...","lastmod":"2025-03-29","duration":"02:00:51","url":"/play/19064251.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEwMzEvOTIwNGJiNTM0ZTM1MWUxZjdkYWFlOWE3MzUwZDcyMTguanBn.cache","vod_id":19103464,"title":"spectacle de double sexe d'une jeune femme sexy","lastmod":"2025-10-30","duration":"33:02","url":"/play/19103464.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly9zYnp5dHBpbWc0LmNvbTozNTE5L3VwbG9hZC92b2QvMjAyNjAyMjQtMS9kZTNkMTVjMTJiNmEyMDU3YTUyNGJkOWFjOWM0ZTNhNS5qcGc=.cache","vod_id":19126715,"title":"Le passé de Yan Yan Jiang, influenceuse sur internet, a été révélé : elle a notamment été arrêtée pour usage de stupéfiants et pour avoir harcelé ses sœurs. Elle a débuté sa carrière en Asie du Sud-Est.","lastmod":"2026-02-24","duration":"01:28","url":"/play/19126715.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNzIxYTNkODhkZTliZDg5NGE1MzM4ZTgwMDFlMjdjMDAuanBn.cache","vod_id":19007148,"title":"Une belle jeune femme aux lèvres rouges et son petit ami portant une chaîne s'adonnent à une double séance de sexe, avec des bas noirs à entrejambe ouverte et un gros cul sexy vigoureusement baisé dans diverses positions - très séduisant !","lastmod":"2025-03-28","duration":"48:25","url":"/play/19007148.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA1MjgvY2MzMzc4Y2FjMjE1YWNjNmU5YmJhMWU2ODQ2NDVlNTUuanBn.cache","vod_id":19076095,"title":"Des rencontres avec des employées de bureau en bas résille dans le métro et la réservation de chambres d'hôtel","lastmod":"2025-05-28","duration":"19:42","url":"/play/19076095.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTExMDgvMmJjNWQxNDk5MDgyY2I4NzM4ODIxZjQwOGQyZmVmYTQuanBn.cache","vod_id":19104955,"title":"Un voyage en solitaire, le cœur brisé, avec l'envie d'utiliser le sexe pour apaiser la douleur d'une rupture. N'importe qui fera l'affaire… envie de faire l'amour jusqu'à perdre la tête, plongé dans un plaisir intense. (Xi Gong Yume IPZZ_385)","lastmod":"2025-11-07","duration":"02:01:56","url":"/play/19104955.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA3MDUvZjRkNjgxNGZkMDE1YmUxMTkzOGExMGIxZmIyMTU4NDQuanBn.cache","vod_id":19082087,"title":"Une jeune fille innocente du lycée est entraînée par son petit ami à se faire baiser et à se faire sucer le sperme comme une chienne.","lastmod":"2025-07-04","duration":"15:41","url":"/play/19082087.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZWIyZWRlYThiN2Y3MzMyYWMzYmNmNDllNDFkYWRhZjAuanBn.cache","vod_id":19124743,"title":"Filmée en secret, fuite, sexe oral dans les toilettes d'un bar, je n'en pouvais plus","lastmod":"2026-02-15","duration":"02:34","url":"/play/19124743.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZjBlMTEyYWQzNmQ1NzQ5MWYwNGU2NDQ0MmMwYThhZTMuanBn.cache","vod_id":19021354,"title":"L'influenceuse étudiante sur Twitter « An Xueer » a été surprise en train de faire l'amour dans un hôtel !","lastmod":"2025-03-29","duration":"09:44","url":"/play/19021354.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMDI5OTdhMTExZWIzNTk3NDA3MzdlYmIwNDY4NzlmNjguanBn.cache","vod_id":19022099,"title":"[Xiao Tao] Un café fréquenté par des partenaires sexuels occasionnels en manque de sexe propose désormais des services de caresses et de jeux érotiques dans un hôtel !","lastmod":"2025-03-29","duration":"35:15","url":"/play/19022099.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMmE0MTRiMWMyZmVjMjNiZThmYzU1NzYxNmNhMThkMmMuanBn.cache","vod_id":19013213,"title":"[Hôtel Boutique] Collection de Déesses du Semence !","lastmod":"2025-03-28","duration":"40:23","url":"/play/19013213.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvOTM3MGFhMjM3NjZkMDY2MzA4ODE3YzVjYWFlZjAxOWUuanBn.cache","vod_id":18959583,"title":"La sœur de la poupée HongKongDoll a fait l'amour dans la salle de bain jusqu'au lit.","lastmod":"2025-03-28","duration":"17:05","url":"/play/18959583.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA3MjAvZmNhOTQ1ZTU5NGZhZjgwYzc5OTE2ODhkNzczOTFjNTEuanBn.cache","vod_id":19085154,"title":"La grande sœur jouait sur son téléphone, allongée sur le canapé. Quand le petit frère l'a vue, il s'est agenouillé et a commencé à la lécher, tout en prenant des selfies avec son téléphone.","lastmod":"2025-07-19","duration":"12:00","url":"/play/19085154.html"}]},
videoTitle: 'Un couple taïwanais surpris en plein acte sexuel dans une chambre d'hôtel ; selfies pris lors d'une excursion sur l'île.',
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=/`;
}
};
}