개인적인 사진 유출: 햄버거는 남자의 성기만큼 좋지 않아, 음탕한 년은 햄버거 먹는 것에도 관심 없고, 아빠의 성기로 박히고 싶어 울고 있어","lastmod":"2026-07-11","duration":"","url":"/play/19267161.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvOTA0NjA1ODlhZDY5Mjc1ZGI5Y2IwN2JmYzIyZGMzYzYuanBn.cache","vod_id":19177744,"title":"음탕한 년, 도그스타일, 탱탱한 엉덩이...","lastmod":"2025-03-30","duration":"0:06:19","url":"/play/19177744.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZmVjYzQ0MWJjNTgxNTBmNDYyMDk2ZjA0MzVmNjdmMWEuanBn.cache","vod_id":19239743,"title":"더블 페네트레이션, 최고급 꼬맹이, 용이 항문에 꽂아 넣는 듯한 움직임으로 거대한 자지를 가진 남자가 천국에 있는 듯한 기분을 느끼게 한다.","lastmod":"2026-01-15","duration":"0:32:40","url":"/play/19239743.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZjc1NWU1Y2FkYmNmMjkwYmE5OGU1ODhlNmMzODFkOGYuanBn.cache","vod_id":19060305,"title":"ETQR-125 사랑스러운 펠라치오로 가득 찬 핑크 살롱! 코토네 동아시아 (1)(1)","lastmod":"2025-03-29","duration":"1:02:04","url":"/play/19060305.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZGY4Yjk2NDVkNDE4NTdkODk4NjllNWY5MDY4NTFiNzMuanBn.cache","vod_id":19134506,"title":"나는 콘돔도 없이 작고 부드러운 찐빵으로 그 완벽하고 여린 보지를 사정없이 박아댔고, 마침내 그녀가 내 안에 하얀 정액을 잔뜩 쏟아낼 때까지 멈추지 않았다!","lastmod":"2025-03-29","duration":"0:20:24","url":"/play/19134506.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYzcxODY2MDYzZDRhNDAyNTE5ZTkzMmQ3OGFiMmNmZWUuanBn.cache","vod_id":19173744,"title":"셰리는 너무 귀여워! 인기 인터넷 스타잖아! 그녀의 전업주부 남자친구가 그녀와 섹스를 하고 있어.","lastmod":"2025-03-30","duration":"0:53:05","url":"/play/19173744.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA2MjIvM2FkNjQwOGNhMTZhNjgwZmQwNDExNTU3MGZhMDY5NGIuanBn.cache","vod_id":19264794,"title":"음탕한 여교사가 학생들에게 \"너희들은 그의 성기를 만져봐.\"라고 지시합니다. [TeacherFucksTeens]","lastmod":"2026-06-21","duration":"0:13:20","url":"/play/19264794.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYTVmZGZjMDc0MDZjZmRhMmQ1NjlmNTVhYzc3YjM2ZTguanBn.cache","vod_id":19105633,"title":"검은 스타킹을 신은 여신이 젊고 잘생긴 남자와 격투를 벌입니다. 남자의 거대한 성기가 그녀의 입속으로 들어가고, 남자는 부드럽게 핥으면서 깊숙이 목구멍까지 넣는 오럴 섹스를 합니다.","lastmod":"2025-03-29","duration":"0:39:57","url":"/play/19105633.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly9mYS5zbDI2MDIwNC50b3AvdXBsb2FkL3ZvZC8yMDI2MDIyNy0xL2M5ZDJjMjQzYmVjN2RlN2RmOGZmZjkyNTY2Yzg0NmQ0LmpwZw==.cache","vod_id":19246834,"title":"내 남자친구는 옆에서 곤히 잠들어 있었는데, 그는 정체를 알 수 없는 연상의 남자와 섹스를 하며 그 짜릿한 성적 흥분을 다시 느끼고 있었다.","lastmod":"2026-02-27","duration":"0:20:05","url":"/play/19246834.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMjc3ZDJiZWIzN2QxOTdjM2EyYmY1OWU2M2Q0OTgzZjkuanBn.cache","vod_id":19076534,"title":"\"탑 플라워 시리즈\" - 긴 다리에 끈팬티를 입은 음란녀와의 호텔 섹스","lastmod":"2025-03-29","duration":"0:27:18","url":"/play/19076534.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMTMvY2U4MGI3YjI2MWE2YTM3OThjMmZlYTJiYjJmNWU4MjYuanBn.cache","vod_id":19233446,"title":"JVID 얼굴 사정 순간 표정_신비한 여교사의 가짜 페니스 얼굴 사정 음란한 여학생","lastmod":"2025-12-13","duration":"0:31:41","url":"/play/19233446.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA2MDgvOGQ2NGRjZDgwM2E1MTU4MGQ1ODI1MWM5MWQyZGExN2EuanBn.cache","vod_id":19206843,"title":"JUQ854 독점 파트 2!! 첫 TV 드라마 NTR 공개! 머지않아 남편 것 말고 다른 남자의 성기도 받아들일 거예요.","lastmod":"2025-06-08","duration":"2:01:29","url":"/play/19206843.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA0MjcvNzE5ZDU0ZmZlMDlkNWQxYjkzMDZlNGY1ZjI3MTRhN2EuanBn.cache","vod_id":19199607,"title":"코스플레이어가 옷을 벗고 G컵 가슴과 섹시한 몸매를 드러냈다!? 사토 리코 EKDV-631-C","lastmod":"2025-04-27","duration":"","url":"/play/19199607.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly9mYS5zbDI2MDIwNC50b3AvdXBsb2FkL3ZvZC8yMDI2MDIxOS0xLzY4YmQ1ZWQ4MmU4NWZlM2Q5YzE2MDNmZjkzZjQ2M2VlLmpwZw==.cache","vod_id":19245592,"title":"발 마사지 업소에서 젊은 여자를 완전히 사로잡았어. 그녀의 분홍빛 보지와 크고 하얀 엉덩이...","lastmod":"2026-02-19","duration":"0:19:33","url":"/play/19245592.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA4MDIvMjVlMjBmZmIwMDE4YjlmMmRlMjdlMjkxODcwZmFlYjUuanBn.cache","vod_id":19216247,"title":"눈부시게 아름다운 문신을 한 여자가 호텔에서 남자친구와 섹스를 했다. 그녀를 불쌍하게 여긴 남자친구는 그녀의 기운을 \"기져주겠다\"며 두유와 함께 그녀의 입에 사정했다.","lastmod":"2025-08-01","duration":"0:45:43","url":"/play/19216247.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvM2JkM2QzZmUyYjlkOGRiYWU3ZTczYzFhMzdkYjhiMWMuanBn.cache","vod_id":19249987,"title":"\"그가 우리 엄마와 결혼한 이유는 나 때문이었어.\" 아내는 일주일 동안 고향으로 돌아갔고, 그녀의 조숙하고 가슴이 큰 의붓딸은 피스톤 운동과 같은 움직임을 하는 엄청나게 강력한 성기로 체벌을 받았다. (PPPE-392)","lastmod":"2026-03-19","duration":"1:59:22","url":"/play/19249987.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMjJiN2RiOWVkMGM5YzY2ZTNkZjc5MDVjNzMxN2ZhNTguanBn.cache","vod_id":19052469,"title":"순수하고 청순한 젊은 모델과의 완벽한 데이트","lastmod":"2025-03-29","duration":"1:03:20","url":"/play/19052469.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA2MDMvOGNjYTk5M2NmYWJiZWEyNDRhZjAyMTgwMjEwMTQ0NjIuanBn.cache","vod_id":19261675,"title":"풍만한 몸매의 여자는 세 번이나 잔인하게 강간당했고, 그녀의 음탕한 행실이 적나라하게 드러나면서 정숙한 아내라는 이미지가 완전히 뒤집혔다.","lastmod":"2026-06-02","duration":"0:03:15","url":"/play/19261675.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMTYxMDlhM2VkN2FlZmM2MjIzMGFmNWM0MjRhNDYxZDguanBn.cache","vod_id":19121585,"title":"최근 크라우드펀딩을 통해 최고급 모델 조엘린과 함께 코사무이에서 맞춤형 여행 사진 촬영을 진행했습니다. 그녀의 몸매와 외모는 흠잡을 데 없고, 특히 가슴은 정말 인상적입니다. 1080P HD 화질로 촬영했습니다.","lastmod":"2025-03-29","duration":"0:21:40","url":"/play/19121585.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZWQ0YzEyZmIxNzE1OTgyMjIyZDUzOGZhOGFiZDc3NWQuanBn.cache","vod_id":19163442,"title":"#라이브 스트림_호텔에서 모델 같은 몸매의 여신을 만났어요_창문을 통해 들어가 섹스를 했는데, 그녀의 검은 스타킹과 늘씬한 다리가 정말 섹시했어요","lastmod":"2025-03-30","duration":"1:42:14","url":"/play/19163442.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA1MTQvNjdlNTZkNmY2MDljOGQyMTdkYjVkNzVkZjcxYmRhYmEuanBn.cache","vod_id":19202784,"title":"학교에서 제일 예쁜 여학생(고등학생)이 나와 내 남자친구가 섹스하는 걸 지켜보다가 결국 더 이상 참지 못하고 그만뒀어.","lastmod":"2025-05-14","duration":"","url":"/play/19202784.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvOGRkYzQ0OTRiNWRiZTliYjQ4OTlmN2VkMDhmOTRiNTIuanBn.cache","vod_id":19249221,"title":"대조적인 이미지의 음탕한 소녀 미도우지가 자위하며 사정하는 모습을 클로즈업으로 촬영한 모음집입니다.","lastmod":"2026-03-16","duration":"0:12:24","url":"/play/19249221.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZDE1NzJjM2QwMjU2NDkwNDJkMDM2Zjc1YTZlYTYxZTUuanBn.cache","vod_id":19039255,"title":"그 남자는 엄마와 딸을 가지고 노는 데 정말 능숙했어요. 그는 내내 얼굴을 드러내고 엄마와 딸에게 가벼운 SM 훈련을 시켰는데, 문어 의자에 묶이는 것, 구강성교, 그리고 자신의 큰 성기로 딸의 음부를 핥는 것 등이 포함되었죠. 딸과 엄마를 동시에 만족시키는 건 정말 흥분되고 자극적이었어요.","lastmod":"2025-03-28","duration":"","url":"/play/19039255.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=/`;
}
};
}