<제목>나가카와 노아×코토네 투아이 자매의 개인 화보집 여신 같은 경쟁 수영복 여자가 카메라를 갖고 귀여운 수영복 여자의 사진을 찍는다 栄kawa乃亜,冬爱とね 亲父の个撮","lastmod":"2026-07-11","duration":"01:34:20","url":"/play/19161896.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMmUwNGViMDhjODMyM2ViNjUyMjExOWVhOTJiNDE3YTYuanBn.cache","vod_id":18954879,"title":"그 음탕한 여자는 진정해야 했기에 남자가 그녀의 작은 입술에 키스하고, 가슴을 주무르고, 음부를 자극하도록 내버려 두었다. 그녀는 옷을 모두 벗고 69 체위로 오럴 섹스를 받으며 끊임없이 신음했다. 남자는 그녀의 다리를 침대 위아래로 들어 올리며 짜릿하고 흥분되는 방식으로 그녀를 강렬하게 범하고 유린했다.","lastmod":"2025-12-14","duration":"00:58:31","url":"/play/18954879.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvODBiYjczMjA4ODQ5YWFiYWMxZTcyNGRkOTZiYjFmNDAuanBn.cache","vod_id":19138016,"title":"네가 손가락 하나 까딱할 필요 없었어. 길가에서 패스트푸드를 먹고 예쁜 젊은 여자애랑 섹스를 했거든. 몇 번 삽입만에 오르가즘을 느꼈어.","lastmod":"2026-01-12","duration":"14:20","url":"/play/19138016.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMjA0MGQxZjEzZDhkOGY3NGNmMjE0N2Q0MTg3NTJkZjYuanBn.cache","vod_id":18969996,"title":"3/10 소프트: 매혹적인 검은 피부의 시골 소녀가 고전적인 자위 동작으로 자신의 음부를 긁어대며 욕정 어린 애액이 끊임없이 흘러나오게 합니다!","lastmod":"2025-03-23","duration":"00:32:38","url":"/play/18969996.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZmRkZGU1ZDc3NzU4ZjA5YzAyOGMxZTQzYzgyMjg0ZTAuanBn.cache","vod_id":18975298,"title":"한 젊은 여성이 남자친구와 소파에서 성관계를 갖고 있었는데, 그녀의 얼굴이 완전히 드러나 있어 다양한 체위의 성관계 가능성을 보여주고 있었다.","lastmod":"2025-12-14","duration":"00:54:59","url":"/play/18975298.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEwMDUvNGYyZTRkOGVmZjIxZGE3YWQyNWFlOTczZDBlNWM5MGIuanBn.cache","vod_id":19056080,"title":"언더그라운드 아이돌의 은밀한 성관계 서비스. 사랑스럽고 귀여운 아마추어 소녀, 거부할 수 없는 매력, 사정 포함. 4회 연속 오르가즘을 경험하는 역할극. 무명 여배우 HRSM074","lastmod":"2025-10-04","duration":"02:13:37","url":"/play/19056080.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvY2E4YzAzYWY1NzQ3OWE1YjE2ZWFhZDY4NDY5MzgyNTkuanBn.cache","vod_id":18930422,"title":"남자 한 명과 여자 두 명이 함께 놀고 있었다. 젊은 여자는 나체로 자신의 몸을 만지고 있었다. 그녀는 날씬한 몸매에 아주 여린 음부를 가지고 있었다. 매우 유혹적이고 매혹적으로 보였다. 이런 걸 좋아한다면 놓치지 마세요.","lastmod":"2025-03-22","duration":"00:44:52","url":"/play/18930422.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA3MjkvZmJmZmEzMTc0MDViNjllOGU2MTcyZjk3MDBiYWU0OGEuanBn.cache","vod_id":19044621,"title":"최근 바이두 클라우드에서 유출된 이미지에는 중국 동부의 한 대학 금융학과 여학생인 상멍전이 선배와 함께 있는 모습이 담겨 있다.","lastmod":"2025-07-28","duration":"29:58","url":"/play/19044621.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvOTc5NzkyMTEyZGRjY2ViYTEyM2NkYjAwZjdjOGM5OTQuanBn.cache","vod_id":19152287,"title":"대만 수도 출신의 매력적이고 재능 있는 여대생이 대만 여학생과 관계를 맺는데, 그녀는 대만 억양으로 신음 소리를 낸다.","lastmod":"2026-04-08","duration":"47:58","url":"/play/19152287.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZGRjOGE3MzYyNTAzMmYzZjgzYWU3NWY3MzRhMGM2NmMuanBn.cache","vod_id":19152440,"title":"18세, 키 148cm, 왜소하고 가슴이 납작한, 은둔형 소녀이지만 사실은 헤픈 여자. (미카 소라 PKPD-404)","lastmod":"2026-04-09","duration":"02:06:02","url":"/play/19152440.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEwMTkvMmM0MWY4MmI5Y2I4NTExZTNhYjQ5NWE4YjdjNWQ2MDYuanBn.cache","vod_id":19058409,"title":"[중국] 하얀 정장을 입은 예쁜 여자를 만났어요.","lastmod":"2025-10-18","duration":"13:07","url":"/play/19058409.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA3MDYvYjY4ZWM3Y2RkNDcxM2I5MzlmNDAzNjQzMjAwNTEwYTEuanBn.cache","vod_id":19167246,"title":"두 명의 근육질 남자가 비아그라를 복용하고 순수한 어린 소녀를 격렬하게 강간합니다. 소녀는 중간에 후회하며 울음을 터뜨립니다. ...title>","lastmod":"2026-07-11","duration":"13:37","url":"/play/19167246.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA1MTMvODhiM2ZkOTlkYjgwZTAzMDUzOGM1ZWY1NTdjNWM2ZmUuanBn.cache","vod_id":19161002,"title":"나는 예쁜 여자와 쓰리썸을 약속했다.","lastmod":"2026-05-31","duration":"59:34","url":"/play/19161002.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvOThjYTFmOWRmZmVmOTVjZWRhYmZkMDY4MmUzOWIwNDEuanBn.cache","vod_id":18924025,"title":"아름답고 사랑스러워 보이는 한 커플이 섹스를 하고 있다. 여자는 남자 위에 올라타 소파를 붙잡고, 유혹적인 신음과 헐떡임을 내뱉고 있다.","lastmod":"2025-12-14","duration":"02:18:34","url":"/play/18924025.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTExMTUvOWZiMmZjNjU2ODQxYjBlZDUwMmM3MzdiYjZiODA1NDAuanBn.cache","vod_id":19062687,"title":"오늘 아침에 일어나 보니 같이 일하는 글래머러스한 여직원이 제 여자친구와 사이가 안 좋다는 걸 알게 됐습니다. 그녀는 성격과 체형이 비슷한 남자와 만나고 있었더군요. (마지막 부분 \"春阳モカ MIAB_289\"는 관련이 없어 보이며, 다른 출처를 가리키는 것 같습니다.)","lastmod":"2025-12-14","duration":"02:24:29","url":"/play/19062687.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNGFmNDQ1MzY3ZTU5ODhlNTc2ZjRlZTI4ZjY1Y2RjYmIuanBn.cache","vod_id":18926662,"title":"금발에 매력적인 외모, 감미로운 목소리를 가진 여성이 한쪽 다리에 스타킹을 신고 진동 에그를 사용하며 손가락으로 외음부를 애무하고 엉덩이를 흔들며 신음하고 헐떡이는 모습은 매우 유혹적입니다. 이런 스타일을 좋아한다면 절대 놓치지 마세요!","lastmod":"2025-12-14","duration":"01:09:31","url":"/play/18926662.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNzkzNjI4ODY0YzA0NThjZTVjYmMxYjIxZDJiMDY5MWQuanBn.cache","vod_id":18926587,"title":"귀여운 소녀가 양갈래 머리에 마스크를 쓰고 면양말을 신은 채 소파에 앉아 자위 쇼를 펼칩니다. 그녀는 남성 성기를 이용해 삽입, 이리저리 움직이며 신음하고 헐떡이는 등 매우 관능적인 모습을 보여줍니다. 절대 놓치지 마세요!","lastmod":"2025-12-14","duration":"01:04:58","url":"/play/18926587.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA1MTMvZWU5N2NiYjZlNGM4YjdkZjExYTVlNTQyZWMzYjIzMzcuanBn.cache","vod_id":19161601,"title":"꿈을 쫓는 인문학관 오늘 밤 이 소녀는 꽤 괜찮네 88파운드 최고 품질 긴 다리 높은 가치","lastmod":"2026-07-11","duration":"52:33","url":"/play/19161601.html"}]},
videoTitle: '소녀 1',
language: 'ko',
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('링크 복사 완료!');
}).catch(() => {
// 降级到旧方法
document.execCommand('copy');
alert('링크 복사 완료!');
});
} else {
// 降级到旧方法
document.execCommand('copy');
alert('링크 복사 완료!');
}
}
},
// 切换布局
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=/`;
}
};
}