Fruit Pie Nanase Alice's Friends' Choice Black Stockings Manga Adaptation Masterpiece ABF-131","lastmod":"2026-07-11","duration":"19:04","url":"/play/19163964.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZGI5MmM4Mjk1MTMxNWNiNmM5YTcyMmI2NWRjY2I4MzYuanBn.cache","vod_id":18966826,"title":"Le gangster masqué s'est offert les faveurs de deux femmes mariées de grande qualité, toutes deux lascives et séduisantes, qui lui ont prodigué des fellations, lui ont sucé les seins, ont joué avec son vagin, et ont subi un viol collectif et des pénétrations. Leurs gémissements et soupirs constants étaient incroyablement excitants.","lastmod":"2025-12-14","duration":"01:03:46","url":"/play/18966826.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA5MTQvN2NhYWQ4ZWNkYjk0ZmNhYzAxMmExMTIyNzVkMWFjZDMuanBn.cache","vod_id":19052474,"title":"Une esthéticienne mariée qui souhaite être toute-puissante et agressive au lit - Tamashiro Natsumi (VENZ037)","lastmod":"2025-09-13","duration":"01:54:17","url":"/play/19052474.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNWFlYmZkMzQzNGJiMDAwZDFhZmIzMDU2YWY4ZWJiY2MuanBn.cache","vod_id":19010177,"title":"Narration - Un cas miraculeux d'inceste 21.","lastmod":"2025-03-24","duration":"08:34","url":"/play/19010177.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMTMvYTBiMTc0MjY5ZGVjNTAyNDUwYzI0NmQxYmUyMGRlZDIuanBn.cache","vod_id":19067009,"title":"Commentaire sur les tartes aux fruits : Un jeune marié trompe son conjoint après seulement une semaine de mariage.","lastmod":"2025-12-14","duration":"13:07","url":"/play/19067009.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvYTM0ZjhjZDkxM2M0YTA5OWE2NjJjNGFhZGIyNjk1MTcuanBn.cache","vod_id":19141478,"title":"[Poitrine généreuse et voluptueuse] Femme mariée aux formes généreuses et à la sexualité débridée, dotée d'un pénis imposant, se livrant à un acte d'adultère abominable. HMDNV-859","lastmod":"2026-02-04","duration":"01:24:39","url":"/play/19141478.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvOWQzMTJkNjAyN2ExMjlhZTRhN2E3MjYxMjhmZGVjODkuanBn.cache","vod_id":19025793,"title":"VOSS163 a fait appel aux services d'une femme mariée pour des prestations érotiques, et il s'est avéré qu'il s'agissait de son ancienne et ravissante professeure. Compte tenu de ma réputation sulfureuse durant mes années d'études, elle m'a pris pour cible, et j'ai toujours eu d'excellentes notes.","lastmod":"2025-03-24","duration":"01:45:14","url":"/play/19025793.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvMjBjNTIyNjlmNTBkMWYzNWY3YzNlYjkzYzQxNGI2NjIuanBn.cache","vod_id":19150945,"title":"Tarte aux fruits et amour d'enfance font l'amour sans arrêt MIDE-954","lastmod":"2026-03-30","duration":"14:38","url":"/play/19150945.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYWYwNjMyYzU4ODBkNjQ3ZGI0NjE2NzRlNDkxM2JmN2YuanBn.cache","vod_id":18961935,"title":"MEYD-023 La belle Mio Kayama est victime d'un viol collectif commis par des proches de son mari.","lastmod":"2025-03-22","duration":"01:58:17","url":"/play/18961935.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYTk5ZWMxZWVmN2M2MTAzN2M5ZTEyMWRkOGJkYzc5YzIuanBn.cache","vod_id":19003723,"title":"SSNI-390 Pervers de bibliothèque ~Jeune épouse violée en public~ Aoi Toshika","lastmod":"2025-03-23","duration":"01:58:25","url":"/play/19003723.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvMmIwYWQyNGE2ODVkZjczMmYxZDRmYmNjZDVjMDRmYmQuanBn.cache","vod_id":19155284,"title":"Tarte aux fruits, meilleure amie aux gros seins amoureuse d'un salaud : voilà à quoi devrait ressembler un plan à trois (EBOD-998)","lastmod":"2026-04-26","duration":"28:03","url":"/play/19155284.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvN2JkZjY3Y2Q2Y2I2MTZlY2Q1NDg1ODIzZTYxYzMzZjAuanBn.cache","vod_id":19149186,"title":"Le beau-père, un flagorneur, est un parfait imbécile ; sa belle-fille a perdu son corps et son âme. (IPX-922)","lastmod":"2026-03-19","duration":"14:32","url":"/play/19149186.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTExMjQvNDRmODkwYWE2NTQ0Nzg5MTA0OWU1M2QyM2JkNDI0NzIuanBn.cache","vod_id":19064295,"title":"Commentaire sur la tarte aux fruits : Les rencontres sexuelles muettes avec une petite beauté diabolique en uniforme","lastmod":"2025-12-13","duration":"13:25","url":"/play/19064295.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvODlhZGMxZWE4MjA0NjliOTQzMWM0MWI3ZDk2OGJlMzkuanBn.cache","vod_id":18992388,"title":"DTT-028 Superbe épouse Super M, organisatrice de mariage, 33 ans, femme au foyer perverse se masturbant, début AV d'Erina Rin 1","lastmod":"2025-12-14","duration":"02:06:58","url":"/play/18992388.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA5MjEvMGNjMzllMGMyZTc4MWJkY2ZmNGJmMDhlNTFlMDc0MmYuanBn.cache","vod_id":19053669,"title":"Le commentateur de tartes aux fruits a déclaré que sa femme avait appelé sa meilleure amie vierge aux gros seins et qu'ils avaient eu un plan à trois.","lastmod":"2025-09-20","duration":"17:40","url":"/play/19053669.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvODVjNThlODIyNDUyNjBkY2U1Y2Q2OWY3N2Q1MGMzMzUuanBn.cache","vod_id":19149180,"title":"Tarte aux fruits : Une romance financée par l’État, ce n’est rien comparée au sexe financé par l’État ! (MIDV-999)","lastmod":"2026-03-19","duration":"21:11","url":"/play/19149180.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMTQvODdkN2Q2NDM3N2QzNmZkNzczNmRjYjMzN2E0NThkZDMuanBn.cache","vod_id":19112075,"title":"[Commentaire audio-vidéo] Nao Jinguji, propriétaire de bains publics","lastmod":"2025-12-14","duration":"12:47","url":"/play/19112075.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvMTlhYzYzN2Q1ZTkxMzA4OWU2ZWM3NTMyMGZjYmIyOGEuanBn.cache","vod_id":19155771,"title":"Tarte aux fruits, patronne aux gros seins portant des bas, discipline Giegie avec une grosse bite MIAA-578","lastmod":"2026-04-29","duration":"28:20","url":"/play/19155771.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvODI1YmJmODA2ZmZmNjJhYzcwYWE3NDU1NWRmZGIxNjAuanBn.cache","vod_id":19010128,"title":"SCP002 (HD) #RecrutementFemmesAuFoyers Ichinose Ayame, institutrice active, super érotique et sensuelle [HD censuré avec sous-titres chinois]","lastmod":"2025-03-24","duration":"02:08:37","url":"/play/19010128.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEwMzAvZTYyNzBmZGY3MDJhYzEyYWU2ZmRlYTYxMjMzZDU4ZTIuanBn.cache","vod_id":19060202,"title":"Première fois que je filme une femme mariée - Miyuki Chisuke JRZE-153","lastmod":"2025-10-29","duration":"02:06:46","url":"/play/19060202.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA0MTQvZTllMmQ1NjU3YWM2ZjZjNDZkMjdiYWUzYWU3M2RiZTIuanBn.cache","vod_id":19029150,"title":"Incapable de résister à l'ami de son fils... La chambre de son mari est juste à côté... Une femme au foyer obsédée par les jeunes garçons, Honma Yuri, Maeda Yuki VANDR-016-C.","lastmod":"2025-04-13","duration":"02:19:20","url":"/play/19029150.html"}]},
videoTitle: 'Commentaire sur la tarte aux fruits : Un esclave vert aveugle envoie à distance neuf tartes aux fruits à sa femme.',
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=/`;
}
};
}