登录账å�·P}h2>brlf5Rn登录å�Žå�¯ä½¿ç”¨ VIP æ�ƒé™�ã€�å�¡åˆ¸å’Œä¸ªäººä¸å¿ƒã€‚brlf5Rn nPro‰§ænfortologinUsername">用户å��brlf5RnRnPinput idtologinUsername"heeviceusername"hautocomplete="username"hminlength="3" maxlength="32" required>brlf5Rn nPro‰§ænfortologinPassword">密ç �<«lo‰§æ>brlf5RnRnPinput idtologinPassword"heevicepassword"h线æ’mpassword"hautocomplete="curren -password"hminlength="6" maxlength="72" required>brlf5Rn nPpn=s«te-¼form-message"ndata-form-message>登录P}button>brlf5Rn没有账å�·ï¼Ÿç«‹å�³æ³¨å†Œ=/button>brlf5-/sectionri cb
brlf5bla cbrlf5Rnhbutton Tbrandamodal-close" 线æ’mbutton" data-closevmodal="registerModal"a-chevro‰§æ="关闿³¨å†Œçª—å�£">×P}button>brlf5Rn创建账å�·P}ink rbrlf5Rn注册新用户P}h2>brlf5Rn用户å��支æŒ�å—æ¯�ã€�æ•°å—和下划线,密ç �长度为 6-72 ä½�。brlf5Rn nPro‰§ænfortoregisterUsername">用户å��brlf5RnRnPinput idtoregisterUsername"heeviceusername"hautocomplete="username"hpattern="[A-Za-z0-9_]{3,32}" required>brlf5Rn nPro‰§ænfortoregisterEmail">邮箱brlf5RnRnPinput idtoregisterEmail"heeviceemail"h线æ’memail"hautocomplete="email"hrequired>brlf5Rn nPro‰§ænfortoregisterPassword">密ç �<«lo‰§æ>brlf5RnRnPinput idtoregisterPassword"heevicepassword"h线æ’mpassword"hautocomplete="new-password"hminlength="6" maxlength="72" required>brlf5Rn nPro‰§ænfortoregisterConfirmPassword">确认密ç �<«lo‰§æ>brlf5RnRnPinput idtoregisterConfirmPassword"heeviceconfirmPassword"h线æ’mpassword"hautocomplete="new-password"hminlength="6" maxlength="72" required>brlf5Rn nPpn=s«te-¼form-message"ndata-form-message>注册并登录P}button>brlf5Rn已有账å�·ï¼Ÿè¿”回登录P}button>brlf5-/sectionri cb
brlf5brlf5RnRnss返回P}ink rbrlf5Rn P}button>brlf5Rnf5brlf5Rn æoAvat记录P}h2>brlf5Rn ä»…ä¿�å˜åœ¨å½“å‰�设备bla c nf5brlf5RnRnP}button>brlf5Rn享
PhPhlf5Rnn0P}ink r æ�¡è®°å½•P}strong>brlf5Rn æš‚æ— æœ€è¿‘roAvat<}ink rbrlf5Rnbla c nPro‰§ænTbrandahistory-search"Pbla c n brlf5RnRnPink n=s«te-¼sr-only">æ�œç´¢æoAvat记录<}ink rbrlf5RnRnPinput 线æ’msearch"pdata-history-search placeholder="æ�œç´¢ç‰‡å��或剧éi-"hautocomplete="off">brlf5RnP«lo‰§æ>brlf5Rnh RnRnPink >观看列表<}ink rbrlf5RnRnPsmallpdata-history-results>0 / 0brlf5RnP}div>bla c nPdivpTbrandahistory-list"pdata-history-listnrole="list"p-chevlive="polite">bla clahfootPh>
最多ä¿�ç•™ 30 æ�¡rœ¬æœºè®°å½•清空记录i clalaRnh}button>brlf5Rn
-/sectionri cb
bb -gscript>
(() => {
const config = document.getElementById("playerConfig");
const stage = document.getElementById("playerStage");
const nextLink = document.getElementById("nextEpisode");
const pendingPlayerEvents = [];
let hls = null;
let player = null;
let trackingTimer = 0;
let trackingAttempts = 0;
functionpflushPlayerEvents() {
trackingTimer = 0;
if (window.FlowTrack?.track) {
while (pendingPlayerEvents.length) {
const event = pendingPlayerEvents.shift();
window.FlowTrack.track(event.name, event.properties);
}
return;
}
trackingAttempts += 1;
if (pendingPlayerEvents.length && trackingAttempts < 100) {
trackingTimer = window.setTimeout(flushPlayerEvents, 50);
}
}
functionptrackPlayer(name, properties = {}) {
const event = {
name,
properties: {
video_id: config.dataset.videoId,
authenticated: Boolean(localStorage.getItem(¼auth_token")),
need_vip: Number(config.dataset.needVip || "0"),
play_source: config.dataset.playSource,
play_index: config.dataset.playIndex,
...properties
}
};
if (window.FlowTrack?.track) {
window.FlowTrack.track(event.name, event.properties);
return;
}
pendingPlayerEvents.push(event);
if (!trackingTimer) trackingTimer = window.setTimeout(flushPlayerEvents, 0);
}
functionpdurationBucket(seconds) {
if (!Number.isFinite(seconds) || seconds <= 0) return "unknown";
if (seconds < 300) return "under_5m";
if (seconds < 1200) return "5m_20m";
if (seconds < 3600) return "20m_60m";
return "over_60m";
}
functionpprogressBucket(video) {
const duration = Number(video.duration);
const curren Time = Number(video.curren Time);
if (!Number.isFinite(duration) || duration <= 0 || !Number.isFinite(curren Time)) {
return "unknown";
}
const percent = Math.max(0, Math.min(100, (curren Time / duration) * 100));
if (percent < 25) return "0_25";
if (percent < 50) return "25_50";
if (percent < 75) return "50_75";
if (percent < 90) return "75_90";
return "90_100";
}
functionpauthHº«
Phs() {
const token = localStorage.getItem(¼auth_token");
return token ? { Authorization: `Bearer ${token}` } : {};
}
functionpsavePlayHistory(video) {
const key = avideo_play_history";
let items = [];
try { items = JSON.parse(localStorage.getItem(key) || "[]"); } catch (_) {}
const record = {
id: config.dataset.videoId,
name: config.dataset.videoTcond,
episode: config.dataset.episodeName || "æ£ç‰‡",
url: window.location.href,
poster: config.dataset.videoPoster,
watchTime: new Date().toISOString()
};
const curren Time = Number(video?.curren Time);
const duration = Number(video?.duration);
if (Number.isFinite(curren Time)