Seorang pelajar perempuan yang baru bangun tidur berasa bosan dan melancap. Dia mempunyai susuk tubuh yang sangat bagus. ...","lastmod":"2026-07-11","duration":"24:04","url":"/play/19164832.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvYTZlMzhiMjZmYjRkZTBlMzM4ZjhkMzUzZTU1YzFlZDguanBn.cache","vod_id":19138648,"title":"IsekaiAwakening membawa saya bersama beberapa gadis yang sangat seksi","lastmod":"2026-01-16","duration":"07:18","url":"/play/19138648.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNzc0MDUwN2I4N2I2MDI1MWYyMGZmMjljMDA1YTQ3ZjIuanBn.cache","vod_id":18984834,"title":"10musume Gadis Semula Jadi 091623_01 Seorang gadis amatur, Sachiko Takeda, mabuk oleh keseronokan dijilat sebaik sahaja zakarnya keluar.","lastmod":"2025-03-23","duration":"01:04:20","url":"/play/18984834.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNmE2NTgxNTI1ZWU1MmNjYWRmOWM3ZmI2ODFiNWJlMWQuanBn.cache","vod_id":18958640,"title":"Dewi OL, dia teman wanita manis awak selepas kerja. Rahsia di sebalik seragam OL: jari-jarinya bermain dengan payudaranya sangat menggoda!","lastmod":"2025-12-14","duration":"00:03:49","url":"/play/18958640.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly9pYy4xNTUyNTAyMTQudG9wLzIwMjYwMjIxL0tKbGRSMXZILzEuanBn.cache","vod_id":19144757,"title":"Salon Keluarga Wanita Berkahwin: Isteri Muda dan Jurusolek Kuroshima Rei Jatuh Cinta dengan Zakar Besar Kotor Jirannya yang Kesat MVSD-658","lastmod":"2026-02-22","duration":"02:00:44","url":"/play/19144757.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvMDg5ZWRiZGJmYTg4ZWJjZGVlOTI5NTU0YzEyMWY5ZjAuanBn.cache","vod_id":19135008,"title":"Suatu petang tanpa suami… Seorang wanita yang sudah berkahwin ditangkap melancap setiap hari ditiduri tanpa henti oleh zakar jirannya yang tidak pernah puas dan mentah setiap hari, terperangkap dalam kitaran serangan seksual. (Saito Amiri HZGD-314)","lastmod":"2025-12-24","duration":"01:50:06","url":"/play/19135008.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZjkzMTUyMDIxOTIxZmVkNjQ4NTc0ZDg5ZDkyNGZjN2QuanBn.cache","vod_id":18991818,"title":"200GANA-2084 Seks Lembut Serius, Penggambaran Pertama. 1346 \"Ujibakat telah bermula! Mengikuti saya ke hotel selepas hanya satu ayat, adakah ini tragedi idola bawah tanah? Atau adakah mereka hanya terharu? Suara loli akan menenangkan jiwa anda♪1\"","lastmod":"2025-03-23","duration":"56:35","url":"/play/18991818.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMWVjYjczMDc4MzkzYWM2YWRiYjk5NWEyZmNjMTAyNzIuanBn.cache","vod_id":18991772,"title":"200GANA-2081 Sangat santai, penggambaran kali pertama. 1343 Kacak, sikap yang baik, dan seks yang hebat!! Kami menemui seorang gadis amatur Jepun-Amerika yang cantik di Shinbashi! Dia dalam mood yang baik, jadi kami bertanya kepadanya jika kami boleh melakukan hubungan seks! Dia segera bersetuju, dan kami mula merakam!! Jangan terlepas babak seks erotiknya yang super di mana dia mengerang ketika dia sedang ditiduri oleh batang yang besar!!! 1","lastmod":"2025-12-14","duration":"01:10:14","url":"/play/18991772.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYjA2YmVhNjI0ZTFlYmYwNDMyNDkzYjcxOTk4NDFkZDYuanBn.cache","vod_id":18937998,"title":"SDAB-105 Tujuh jam sebelum perintah berkurung, dua belas batang yang terdiri daripada 12 perempuan jalang mengelilingi seorang gadis cantik dengan susuk tubuh yang sempurna.","lastmod":"2025-03-22","duration":"02:20:22","url":"/play/18937998.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvN2M3NzkyYjA0YWY2ZjBmMjE3ODNlYTkwMzExMTdhMWYuanBn.cache","vod_id":18975293,"title":"200GANA-1657 sangat lembut, tembakan pertama. 1021","lastmod":"2025-12-14","duration":"00:58:07","url":"/play/18975293.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA3MDkvNjA2YThkMjM0YzM2ZGM4ZjdiMzcwMDRlMDBlNDcwOWUuanBn.cache","vod_id":19042020,"title":"WAAA512 Kem latihan afrodisiak seorang pengurus wanita yang serius menggunakan dadah untuk mendorong tingkah laku seksual, menundukkan keinginan seksual seorang gadis yang tidak terkawal, dan zakarnya disetubuhi oleh perunding yang dibencinya dari pagi hingga malam.","lastmod":"2025-07-08","duration":"02:00:13","url":"/play/19042020.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYmRkNzZlMGViODFmNDk4Y2U3MWIyZmRlNGQ2MTMwOWEuanBn.cache","vod_id":18969803,"title":"Makcik montel saya mempunyai payudara yang sangat besar! Susu yang menitis dari farajnya kelihatan seperti air mani yang dipancutkan oleh suami saya di dalam dirinya! Saya akan melancap seperti orang gila dengan dildo yang besar itu! Saya sangat seronok!","lastmod":"2025-03-23","duration":"00:40:29","url":"/play/18969803.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvODQ1OTg4MWIxYTQ4NzM3MzkxYjY0Mzc1N2ViYjRiZTguanBn.cache","vod_id":18978414,"title":"Wanita muda berkaca mata itu dengan penuh ghairah melakukan hubungan seks dengan lelaki di hadapan kamera, meneran dalam-dalam, payudaranya diusap, bermain dengan farajnya, membuka kakinya luas-luas untuk dilihat oleh lelaki itu, dan membiarkan lelaki itu menembusinya dari belakang, menolak dan mengerang tanpa kawalan.","lastmod":"2025-03-23","duration":"00:58:04","url":"/play/18978414.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZTgzM2VhMjdmZGFiYTAyNmU1Y2ZjY2IxNDI4MjQ1ZTEuanBn.cache","vod_id":18944881,"title":"Seorang gadis berkulit cerah dan comel mempamerkan punggung putih seksinya dalam sesi seks berganda, menunggang di atas dan menolak dari belakang – sangat memikat dan menggoda. Jangan terlepas jika anda menyukainya!","lastmod":"2025-03-22","duration":"00:35:40","url":"/play/18944881.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNjNmOTQ4NDlhNDAzNWJmNDdmZDJiZDVhMGM0YmZiY2EuanBn.cache","vod_id":18964751,"title":"Gadis Bernafas Api - Pramugari Xin Xin -: Payudara berisi dan susuk tubuh langsing, dia sungguh menakjubkan! Ia sangat menawan sehingga saya tidak dapat menahan diri daripada melancap!","lastmod":"2025-12-14","duration":"01:18:04","url":"/play/18964751.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNmY1MGI2NmM1ZDc4M2VmODZmYzYyNGY4M2ViZGY5NWQuanBn.cache","vod_id":19140104,"title":"Vanessa Decker menunggang zakar tebal dan keras kekasihnya dalam 21Naturals.","lastmod":"2026-01-24","duration":"07:30","url":"/play/19140104.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA3MTEvZmU0NWQ1NWQ5YWJiOGRkZjNjY2FkMmRjYmQyYjE5ODYuanBn.cache","vod_id":19167980,"title":"Seorang wanita kecil berambut gelap menjadi gila dengan anting-anting zakar yang gergasi! [DanikaMori]","lastmod":"2026-07-12","duration":"17:29","url":"/play/19167980.html"}]},
videoTitle: 'Walaupun Chihiro kekok, dia sangat pandai menghisap zakar. #1 Chihiro benar-benar belajar dengan sangat bersungguh-sungguh.',
language: 'ms',
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('Pautan disalin!');
}).catch(() => {
// 降级到旧方法
document.execCommand('copy');
alert('Pautan disalin!');
});
} else {
// 降级到旧方法
document.execCommand('copy');
alert('Pautan disalin!');
}
}
},
// 切换布局
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=/`;
}
};
}