Fujimori Riho, seorang pekerja seks komersial, diperkosa secara brutal oleh seniornya dan payudaranya yang besar dilecehkan hingga ia kehilangan kendali atas kandung kemihnya.","lastmod":"2026-07-11","duration":"","url":"/play/19244727.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMGUzNjBhMzQ3OTY4N2JlZGY0ZWY1ZTBlMDVjOTg2YmMuanBn.cache","vod_id":19098031,"title":"[Tanpa Sensor] MADM-165 Pengalaman pertamaku adalah dengan istriku yang berpayudara besar di sebelah rumah... Keperawananku direbut oleh payudara tetanggaku, dan sebelum aku menyadarinya, aku telah menjadi seorang sadis.","lastmod":"2025-03-29","duration":"02:17:55","url":"/play/19098031.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZjE5NDZjM2IzZWUzNjA2Njg2NDU0ZTg5NDIyZTJmNzUuanBn.cache","vod_id":19159664,"title":"MIFD081 Aku menemukan seorang gadis cantik. Seorang mahasiswi dari pedesaan, untuk melupakan orang yang telah ia sukai selama tiga tahun, melakukan debutnya di film dewasa.","lastmod":"2025-03-29","duration":"02:31:07","url":"/play/19159664.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMDU1NDUyYzM2M2UyODE0ODg5ODk2OWViN2VkMzljZWMuanBn.cache","vod_id":19084869,"title":"[Tanpa Sensor] JBD-287 Ritual Siswi Terikat Ular - Matsumoto Ichika","lastmod":"2025-03-29","duration":"01:55:51","url":"/play/19084869.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA3MTEvNGJmYzk5NmEwOWYxODA0YmMyMDhhYjUyMDk5Mzg0MGMuanBn.cache","vod_id":19247428,"title":"Payudara Ruru yang besar dan areola yang lebar sangatlah langka! Ini pertama kalinya dia dipenjara, dilatih, dan kemaluannya dipenuhi sperma.","lastmod":"2026-07-20","duration":"","url":"/play/19247428.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZGMwZWRmNzQ1YmUwODZlYjFkYjE1MDAzYTIwM2NlNjcuanBn.cache","vod_id":19033440,"title":"DIPO-059: Rekaman Kamera Tersembunyi Rahasia Bocor!! Seorang pria tua mesum menginginkan seorang gadis nakal.","lastmod":"2025-03-28","duration":"02:59:47","url":"/play/19033440.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZmYyZGEwMjgzNzY3ZjcyYjYwNTI4MzQyZWJjMDAxYjQuanBn.cache","vod_id":19035630,"title":"MIDD-879 Jcup Payudara Super Besar Pelatih Hitomi","lastmod":"2025-03-28","duration":"02:00:01","url":"/play/19035630.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvYzc0OGM4Y2FlOTJiMzhhM2UxZjA5OWI2YzEzODI5MWEuanBn.cache","vod_id":19227807,"title":"Seorang wanita yang sangat cantik dengan payudara besar dan bokong montok, mengenakan stoking hitam, diperkosa secara brutal di dalam sebuah truk menggunakan alat bantu masturbasi. Teman prianya, seorang cabul, tanpa henti menggaulinya hingga kakinya lemas.","lastmod":"2026-04-09","duration":"0:57:39","url":"/play/19227807.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA5MjQvODRlY2FmM2E1NWU4MjQ0YjExZWMwNzYwYTM3YzEwZjAuanBn.cache","vod_id":19195659,"title":"[Lee Ji-eun] Lupa mengunci pintu kamar mandi! Diintip oleh tetangganya, dia basah kuyup dan masturbasi dengan cara yang menggoda, payudaranya yang besar bergoyang-goyang~","lastmod":"2025-09-23","duration":"29:58","url":"/play/19195659.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMzZiNmRmZGM5ODJjZGZmNTc5MDMwNDg3NmZiZTFkMDUuanBn.cache","vod_id":19057709,"title":"Gadis Singapura mempertontonkan tubuh menggoda saat masturbasi tanpa memperlihatkan wajahnya.","lastmod":"2025-03-28","duration":"","url":"/play/19057709.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvYzYxNGZkZjk4MmZmMjI5YjcyNTNjOGJhMzFmY2NmZGIuanBn.cache","vod_id":19232743,"title":"Idola Berpayudara Besar Kelas Atas Sang Idolmaster Digauli dan Diejakulasi Secara Gila-gilaan dalam Versi 4K Full HD","lastmod":"2026-05-03","duration":"0:04:55","url":"/play/19232743.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYjhiOGY0ZGJkM2E2ZmM0MTRhNDczNDRiOTk1N2UyYjEuanBn.cache","vod_id":19063058,"title":"Seorang gadis bertubuh langsing bertemu dengan seorang pria yang sangat mirip dengan gigolo; mereka melakukan seks oral dari sudut pandang orang pertama dan berbagai posisi seksual.","lastmod":"2025-03-28","duration":"01:02:44","url":"/play/19063058.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYTVhODQ1NTQ3OTg1YTg2NjQzODViOGY1M2E2ZjkzNjQuanBn.cache","vod_id":19150934,"title":"300MAAN400 Seorang penjahat cantik yang mengendalikan nafsu seorang pria dengan keterampilan rayuan yang luar biasa! Ketika dia memasukkan penis yang telah dikendalikan ejakulasinya selama seminggu dan hampir meledak... situasinya berbalik! Setiap kali dia memasukkan, dia melengkungkan punggungnya dan menggeliat dengan kenikmatan! Dalam keadaan trance, beberapa orgasme intens! ..","lastmod":"2025-03-29","duration":"","url":"/play/19150934.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNzRjOTlhMTQ4ZWVmYmQxZjUxYzA5MTJkNDVmYTA0MDEuanBn.cache","vod_id":19228887,"title":"MMD - Succubus: Seorang succubus peri bertubuh seksi diperkosa secara brutal oleh penis besar dan mengeluarkan sperma di dalam dirinya hingga mencapai klimaks.","lastmod":"2026-04-13","duration":"0:08:12","url":"/play/19228887.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA1MTMvZmIwNDc1ZTcwMTBjNWJjZmFiZjQ4Y2NlOWExZDVkNGIuanBn.cache","vod_id":19234495,"title":"Erika Ozaki, seorang ibu rumah tangga bertubuh seksi, bergoyang dan menyerah pada rayuan pacarnya di dalam sebuah kandang pelatihan.","lastmod":"2026-05-16","duration":"1:50:03","url":"/play/19234495.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvODIxOTNlYmY3OWUzZTU3YWQ5NzJjOGUxZTU4MzVhMjQuanBn.cache","vod_id":19070584,"title":"Jemi, si cantik dari Taipei, tidak puas hanya masturbasi sendirian ❤️ dan ingin mencari pria untuk memuaskan hasratnya, tetapi malah mendapatkan sepasang sepatu nomor 1.","lastmod":"2025-03-28","duration":"00:30:11","url":"/play/19070584.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA1MTMvNjdjODY4NDA0M2UyMmQxYjI3YjMyZjFlZWFlZWMzZGIuanBn.cache","vod_id":19236376,"title":"Dua saudari bertubuh seksi, penetrasi ganda! Menyusui dan seks intens, ejakulasi ganda!","lastmod":"2026-05-20","duration":"0:36:35","url":"/play/19236376.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYTk1MzlkNzQxZWU0OGYzN2IxMjE3YTZmYzE0N2RjMGEuanBn.cache","vod_id":19058983,"title":"Fotografi jalanan amatir AV: Seorang wanita kantoran cantik dengan bokong besar pergi jalan-jalan dengan mobil perusahaan! Kenapa tidak bolos kerja dan berhubungan seks di dalam mobil? Wanita kantoran yang berkeringat itu ditusuk 8 kali saat mengemudi.","lastmod":"2025-03-28","duration":"","url":"/play/19058983.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA1MTMvMDgwN2NlOThlYmYyODVhODM0MTQwZTAzYTM5ZDFlM2YuanBn.cache","vod_id":19234346,"title":"Aidra Fox, gadis asing berkualitas tinggi dari SweetSinner, menjalani sesi seks pagi yang liar, payudaranya yang besar bergoyang-goyang dan cairan tubuhnya berceceran ke mana-mana.","lastmod":"2026-05-16","duration":"0:31:42","url":"/play/19234346.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNWJlNGZmNWRiOWE0MjQwN2U1NTE0MTRiYmNmZjBjMGYuanBn.cache","vod_id":19099053,"title":"FC2PPV 3635369 Aku suka seks oral! Kana-chan, mahasiswi tahun keempat dengan payudara ukuran G, menelan penis besar, menelan sperma tiga kali, dan ditusuk dua kali!! ※Hadiah Komentar","lastmod":"2025-03-29","duration":"00:38:22","url":"/play/19099053.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvYWE0OTBjNDk4NDBmNDExMjU4MmY5NDgwMDNjZGQyYzUuanBn.cache","vod_id":19220562,"title":"MIAB-580 Mata-mata wanita Akari Shinmura diberi afrodisiak! Payudaranya yang besar bergetar hebat saat ia mengalami orgasme dan kehilangan kesadaran. Setelah wajahnya dilumuri sperma dan ditelan, otaknya rusak, dan ia benar-benar tak sadarkan diri.","lastmod":"2026-03-06","duration":"2:05:15","url":"/play/19220562.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvYTgxMGVjOTc2MTk1NDE4OGZmYzc1ODBjZDMyM2JkYzEuanBn.cache","vod_id":19105594,"title":"384SHSS-003 [Adegan Pertama] Aplikasi AV Online → Pengalaman AV Adegan 1018 Seorang resepsionis bertubuh seksi yang memutuskan untuk membintangi film AV untuk mencari sensasi. Hanya dengan memasukkan jari ke area kemaluannya yang dicukur, tubuhnya akan bergetar dan bergoyang, mencapai orgasme berulang kali…!","lastmod":"2025-03-29","duration":"","url":"/play/19105594.html"}]},
videoTitle: 'FC2PPV 3164706 [Tanpa Sensor/Wajah Terlihat] Payudara G-cup yang besar! Sudah lama aku tidak melihatnya; ini adalah proyek AV amatir.',
language: 'id',
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('Tautan berhasil disalin!');
}).catch(() => {
// 降级到旧方法
document.execCommand('copy');
alert('Tautan berhasil disalin!');
});
} else {
// 降级到旧方法
document.execCommand('copy');
alert('Tautan berhasil 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=/`;
}
};
}