Série Salons de massage : L’argent au service des jeunes femmes aux formes généreuses","lastmod":"2026-07-11","duration":"10:39","url":"/play/19152903.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNjlkNTVlZjZhMmFhZjgwNDBiZGYwNTc4ZDcwNDE1MmEuanBn.cache","vod_id":18948009,"title":"DSVR-1127 [VR] Si je rejoins SOD... j'irai secrètement travailler avec mon supérieur, Nakayama, sans le dire à l'entreprise.","lastmod":"2025-03-19","duration":"45:00","url":"/play/18948009.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYmMzYjA5YjFjMDM2NmU2MzgzOGIwMmMxMDE3ZmRiNDAuanBn.cache","vod_id":19079267,"title":"104DANDY-957 J'ai rencontré une masseuse plus âgée dans un salon de massage pour femmes mariées sérieuses, et le courant est tout de suite passé ! La deuxième fois, je lui ai proposé d'aller dans un love hôtel…","lastmod":"2025-03-19","duration":"02:55:41","url":"/play/19079267.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMTRhN2Q0MTk5MmE3N2IzOGU2ZDY0YTQyMWI1ZGI3NDcuanBn.cache","vod_id":19030880,"title":"Plusieurs stratagèmes de séduction ont finalement permis de réunir la mère et le fils.","lastmod":"2025-03-19","duration":"25:33","url":"/play/19030880.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZWY0ZTFkMjI2ZTNmYmQ2OTQ1ZGViMDRiNzFiZjJlOTAuanBn.cache","vod_id":18970518,"title":"MSPK-001 Après une masturbation secrète, le massage des pieds J●J● a enfin l'occasion de briller ! N°1","lastmod":"2025-03-19","duration":"02:21:27","url":"/play/18970518.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMmI4MTllMWQzYTJiMGZlMzliY2YwYWY4NDhhYzlmODAuanBn.cache","vod_id":18948139,"title":"Massage aux ciseaux d'une rousse assoiffée","lastmod":"2025-03-19","duration":"09:51","url":"/play/18948139.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvN2Q0MzVmODQ1ODZlOTQxZTc3MmNiZmNkYzFhODEzNTMuanBn.cache","vod_id":19029040,"title":"SW-926 Les fesses d'une lycéenne en string qui lui arrive aux genoux. Les filles du lycée se moquaient de moi avec leurs culottes, alors je les ai massées et frottées l'une contre l'autre, on a fait équipe !","lastmod":"2025-03-19","duration":"03:04:29","url":"/play/19029040.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYjQyYzc5Y2E5OGFjOWM4NThkODFhNjgwMGU2ZDNmM2MuanBn.cache","vod_id":19089028,"title":"PPN-11 Ma fiancée s'est fait baiser dans le salon de massage de la mariée avant le mariage.","lastmod":"2025-03-19","duration":"02:45:38","url":"/play/19089028.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA3MjMvZjEwODQ1MGYzOTk3ZTU2YmQxOTRjOTNlYjM2YTZjZWUuanBn.cache","vod_id":19113164,"title":"Modèle - Massage érotique et sexe torride avec des filles étrangères","lastmod":"2025-07-23","duration":"17:52","url":"/play/19113164.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNzM3NDBhMDQwM2MzNGY5YzJkYWE1MmVmYTgxYWE3MjguanBn.cache","vod_id":18972914,"title":"109IENFH-21701 Une jeune fille au cœur pur rencontrée à Shinjuku a défié un homme souffrant de problèmes sexuels à un « massage à l'huile Sumimata » ! (Née)","lastmod":"2025-03-19","duration":"44:03","url":"/play/18972914.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNjQwN2MxYzhjMzMyOWQ4NmEzN2MzMDZiOGYxMDJhYmUuanBn.cache","vod_id":19145576,"title":"Une vidéo qui a récemment fuité montre une belle mannequin de lingerie, élégante et aux longues jambes, travaillant pour Taobao, se faire masturber en secret par un photographe qui a éjaculé à l'intérieur d'elle.","lastmod":"2026-04-19","duration":"07:59","url":"/play/19145576.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYzFiYTA5MTdhZDE4ZTNkMWJkNjNmOWRmNDY3OWJiMTEuanBn.cache","vod_id":18937298,"title":"TT-003_Masseur érotique_Orgasmes multiples par techniques manuelles_Bonheur extrême après une rupture Site officiel","lastmod":"2025-03-19","duration":"32:08","url":"/play/18937298.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZTQ0ZmZkZTdhNWVkYzhkMzI1N2FkNDI2N2NlOGFiYWYuanBn.cache","vod_id":19050181,"title":"XVSR-777 Shiba Inu !! Massage haut de gamme aux huiles essentielles par l’esthéticienne Mao Hamasaki ; ses doux murmures vous feront perdre la tête.","lastmod":"2025-03-19","duration":"02:03:47","url":"/play/19050181.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMDUyZDYzNTM1Y2VmZTIxN2U1MmZlZDA3MGJiOTEyMWYuanBn.cache","vod_id":19014483,"title":"HUNTC-115 Une belle femme confesse son problème d'anorgasmie dans un salon de massage érotique légal d'aromathérapie et vit des choses qu'elle n'avait jamais vécues auparavant.","lastmod":"2025-03-19","duration":"03:09:31","url":"/play/19014483.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYzRiYjVkMjg4YTdhYzU5ODNmNDRmZDFhOTI2NWE1ZmUuanBn.cache","vod_id":18923443,"title":"MIAA-129 Yu Shinoda, la tentatrice aux grosses fesses, chevauche secrètement le marié à côté de sa sœur, vêtue d'une robe de mariée.","lastmod":"2025-03-19","duration":"01:58:33","url":"/play/18923443.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvY2U0NzkzY2IzYzNkZTlkYTQ5NGQ0MzkxMzhkNmE0NGUuanBn.cache","vod_id":19136653,"title":"Il a séduit une masseuse d'une beauté naturelle et l'a progressivement amenée à avoir des relations sexuelles avec lui.","lastmod":"2026-02-13","duration":"42:29","url":"/play/19136653.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYjUxZGE2NGZlMGUxYzUwZDk3ZjI1NDgzNjAwOTk3ZjEuanBn.cache","vod_id":19075201,"title":"FSDSS-679-C Une jeune fille souffrant d'éjaculation précoce est attirée dans un piège sexuel par le traitement impitoyable et obscène d'un chiropraticien.","lastmod":"2025-03-19","duration":"02:14:35","url":"/play/19075201.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZmEwNjQ2MDI4MGE2NmIzMGNkYjNkYjc1OTUzYmJjM2UuanBn.cache","vod_id":19023702,"title":"Un salon de massage privé où une femme abandonne sa meilleure amie - Mo Xici !","lastmod":"2025-03-19","duration":"30:54","url":"/play/19023702.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA0MDcvNjM4N2RkNzA1MmU2OWY2ZGQzYTZjYzIxN2VmYzg4Y2UuanBn.cache","vod_id":19099210,"title":"MIDA-048 J'ai transformé ma satanée sœur écolière sans vergogne en masseuse à domicile pour mon frère...!","lastmod":"2025-04-07","duration":"02:32:57","url":"/play/19099210.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZDZlNzRiZjE0YzE0OGNiYWQxZmQ2NmE2ZjJjYmJhZTkuanBn.cache","vod_id":18935294,"title":"Les Trois Mousquetaires et la Fille de l'Avion","lastmod":"2025-03-19","duration":"01:25:17","url":"/play/18935294.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvOTliOGUzNzJkMzFmZjJmYzgxYzM2ZDliNTc0MzNhMzguanBn.cache","vod_id":19007597,"title":"SABA-899 [Film embarqué en gros plan] 10 filles amateurs bavant en se masturbant","lastmod":"2025-03-19","duration":"02:48:30","url":"/play/19007597.html"}]},
videoTitle: 'MSPK-001 Après une masturbation secrète, le massage des pieds J●J● a enfin l'occasion de briller ! N°1',
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=/`;
}
};
}