Top Slim Body Spasm Incontinence Orgasm, Sexual Awakening Oil Massage, Nishimiya Yume, S-Class Amateur","lastmod":"2026-07-11","duration":"01:56:10","url":"/play/19164024.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZDE0MTJkOTcwYjQ2MjNiNjhlNzgyYzliNjg0ZTcwMmEuanBn.cache","vod_id":18928513,"title":"Heydouga4017-PPV119-11 Toutes les vidéos tournées au cours des cinq dernières années","lastmod":"2025-12-14","duration":"01:06:21","url":"/play/18928513.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvY2VhOTZkMzYyMTEzOWZmZTYzZjYyN2I1ZDgwNjQ5ODUuanBn.cache","vod_id":19135273,"title":"Collection de photos de filles nues amateurs 3 : 50 personnes, 5 heures ; Jeune fille moderne se déshabillant timidement, collection de photos de nus aux longs cheveux ; Acteurs inconnus ; KAGP-366","lastmod":"2025-12-26","duration":"04:59:07","url":"/play/19135273.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZGYxZTBjZGU5ODZiYzJmM2EyMWZjNDI5MTU4YTE5MjguanBn.cache","vod_id":19154384,"title":"Sept ans après ses débuts, l'interdiction est enfin levée. Première performance de Miu Nakamura sur 8 heures au BEST. Miu Nakamura, une amatrice de classe S.","lastmod":"2026-04-21","duration":"08:01:14","url":"/play/19154384.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA1MTMvMThhYzk2NjRhNDBiNzMyNGIzYjRlYzhiODQzYmE1M2UuanBn.cache","vod_id":19160584,"title":"Lors d'un voyage d'affaires, je me suis retrouvée à partager une chambre avec ma patronne, qui m'a toujours méprisée… Elle s'est enivrée et s'est transformée en une vraie salope, prenant une pose de cowgirl… Akari Tsumugi, amatrice de classe S.","lastmod":"2026-05-29","duration":"02:04:26","url":"/play/19160584.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEwMjYvNzIwMmVlNTA4MmJiOTdhMmM2YTQwOGU4MzI4NmI5YWYuanBn.cache","vod_id":19059685,"title":"Des filles campant seules recherchent des hommes bien dotés sur le terrain de camping ! Elles font semblant d'avoir besoin d'aide, puis se retournent et flirtent avec eux. (Acteur inconnu HUNTC_280)","lastmod":"2025-10-25","duration":"03:52:56","url":"/play/19059685.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNDUxOWM0OGY5YmQ5YTc1MDg4NTMzMjEyZWVlMGUzZTMuanBn.cache","vod_id":18997943,"title":"MGT-091 (HD) Ramasser un amateur au coin de la rue VOL.66 ~ Veuillez présenter votre ami minable 7 [Censuré, Haute Définition, Sous-titres chinois]","lastmod":"2025-12-14","duration":"04:04:54","url":"/play/18997943.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNmI0MzhmZjk2MWY1ZDM4NjczMTRiOWNmNzAwZGM1ZjcuanBn.cache","vod_id":18983157,"title":"200GANA-2273 Des images filmées en caméra cachée montrent des séducteurs expérimentés emmenant une jeune femme dans leur chambre pour avoir des relations sexuelles. 159 Une jeune femme mince et distante a été emmenée dans une chambre pour avoir des relations sexuelles.","lastmod":"2025-12-14","duration":"01:03:09","url":"/play/18983157.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMTMvZmZhZGZkMjM2YzcwNmZiZTg5NjAwYzAzMjBjM2QxOTIuanBn.cache","vod_id":19066363,"title":"Viol collectif en position assise pendant 24 heures 03 Y-san, 24 ans, actrice inconnue BONY_115","lastmod":"2025-12-14","duration":"01:59:50","url":"/play/19066363.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYjRjOGM5ODBkMjk4ODllZDIwZjM4ZDQxNTdmYWUwM2MuanBn.cache","vod_id":18958613,"title":"FC2PPV 3176486 [Tournage personnel 86] Film 100% positif pour le corps entier - Comté complet K③ Poils pubiens rasés de près ⑥ Mini-jupe et collants exposés sur le trottoir + Zone résidentielle + Parc","lastmod":"2025-03-22","duration":"02:10:34","url":"/play/18958613.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA5MzAvNjQxYTVjZmM1NmM2MGJkODhhYjNiMDA2YmQzNDBhOGUuanBn.cache","vod_id":19055240,"title":"Vidéo de voyeurisme de haute qualité, digne d'une célébrité, montrant une femme épiant un salon de toilettage pour hommes. Ses talents exceptionnels et ses chuchotements intimes excitent intensément les hommes. Actrice inconnue SMJB005","lastmod":"2025-09-29","duration":"02:39:03","url":"/play/19055240.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMTNkNmZmMzZjODgxZmViODIyZWRkZTY5MzAzOGIzNjQuanBn.cache","vod_id":19026785,"title":"[Louez une tante] Vous pouvez avoir des relations sexuelles secrètes avec elle si vous le lui demandez. Actrice inconnue MEKO-238-C.","lastmod":"2025-03-28","duration":"02:11:10","url":"/play/19026785.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvOGYzY2M5OGY5NmRmYmQ3MTllOTFmN2Q1NTg3OGUxM2EuanBn.cache","vod_id":18974607,"title":"FC2PPV 3280779 [Film personnel] Vrai visage dévoilé : « Yayoi, 21 ans » Une beauté pure et innocente, à la fois sérieuse et masochiste ○ Une jeune fille violemment pénétrée par un énorme pénis ! Explosion !!","lastmod":"2025-12-14","duration":"00:57:08","url":"/play/18974607.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvN2Q0MWQ5YzNmZDYzZDJkMjczODg4OGYzMzU3YzgyNDMuanBn.cache","vod_id":18949927,"title":"[Actrice japonaise] MIAA-018 Je pénètre profondément ton pénis, mais seulement le gland, pendant que tu continues à taquiner la sœur de ta copine. 09/02/2019 Yui Namida, actrice célibataire, Yui Namida, Yui-142","lastmod":"2025-12-14","duration":"01:57:48","url":"/play/18949927.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMGQyZDljZDM4ZjlhNzU3NmYwYjE4MTFlNjRlNWMxYzAuanBn.cache","vod_id":18982185,"title":"534CRT-038 Porté pendant 11 heures [Séance photo personnelle] Jeune fille en sous-vêtements fleuris ludiques_Tenue de marin d'été Prise de vue subjective~Public Spot Cream Pie","lastmod":"2025-12-14","duration":"01:10:56","url":"/play/18982185.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA1MTMvNTI4ZGE4YTg5ZWNjMGFkMzM3ZWE4YjA1MWE0ZGMzMjMuanBn.cache","vod_id":19163048,"title":"Entretien d'embauche à caractère sexuel : Extrait d'entretiens d'embauche à caractère sexuel ciblant des candidates. (Amateur 39)","lastmod":"2026-07-11","duration":"03:58:00","url":"/play/19163048.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA5MjYvNGIxYWYzZDk4ZTdhZGRlODc5MWY5OWY5NWYzNWE0ZDEuanBn.cache","vod_id":19054507,"title":"« Jouer avec les tétons, ça ne compte pas comme une liaison, si ? » Malgré sa petite amie, il a succombé à la tentation provoquée par l'exhibition accidentelle de sa voisine et ses caresses aux tétons, et a fini par coucher avec elle. (Acteur inconnu PPPE261)","lastmod":"2025-09-25","duration":"02:30:41","url":"/play/19054507.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA5MTEvOWQ4YmM4NjllNjY0MDM1NDQxNjRjN2E2NzlmNmExYWMuanBn.cache","vod_id":19052094,"title":"Dans un salon de massage où le sexe oral et les rapports sexuels non protégés sont interdits, un enregistrement complet des actes cachés de pénétration et d'éjaculation non protégées pratiqués par des masseuses de luxe. Acteur inconnu SCPX517","lastmod":"2025-09-10","duration":"02:58:35","url":"/play/19052094.html"}]},
videoTitle: 'HoiHoiCute#10 Amateur HoiHoiZ, tournage en solo, une nuit, en duo avec l'acteur inconnu HIOZ_135 sur l'application.',
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=/`;
}
};
}