ow
This commit is contained in:
1 parent
ac0112b4a3
commit
90bb20e75f
24 files changed
+2722
No files matched your search
@@ -0,0 +1,80 @@
|
||||
// 在页面里注入一个悬浮"下载视频"按钮,贴在当前视频播放器右下角。
|
||||
// 点击后通过 postMessage 通知宿主程序开始下载流程。
|
||||
(function () {
|
||||
var BTN_ID = "qz-video-download-btn";
|
||||
|
||||
function post(msg) {
|
||||
try {
|
||||
if (
|
||||
window.chrome &&
|
||||
window.chrome.webview &&
|
||||
window.chrome.webview.postMessage
|
||||
) {
|
||||
window.chrome.webview.postMessage(JSON.stringify(msg));
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
function bigVideo() {
|
||||
var vids = document.querySelectorAll("video");
|
||||
var best = null,
|
||||
bestArea = 0;
|
||||
for (var i = 0; i < vids.length; i++) {
|
||||
var r = vids[i].getBoundingClientRect();
|
||||
var area = r.width * r.height;
|
||||
if (r.width > 120 && r.height > 60 && area > bestArea) {
|
||||
best = vids[i];
|
||||
bestArea = area;
|
||||
}
|
||||
}
|
||||
return best;
|
||||
}
|
||||
|
||||
function ensureButton() {
|
||||
var btn = document.getElementById(BTN_ID);
|
||||
var v = bigVideo();
|
||||
|
||||
if (!btn && v) {
|
||||
btn = document.createElement("button");
|
||||
btn.id = BTN_ID;
|
||||
btn.type = "button";
|
||||
btn.innerText = "下载视频";
|
||||
btn.style.cssText =
|
||||
"position:fixed;z-index:2147483647;padding:5px 12px;border:0;border-radius:16px;" +
|
||||
"background:#ff2d55;color:#fff;font-size:13px;line-height:1.4;cursor:pointer;" +
|
||||
'box-shadow:0 2px 8px rgba(0,0,0,.35);font-family:system-ui,"Microsoft YaHei",sans-serif;';
|
||||
btn.addEventListener(
|
||||
"click",
|
||||
function (e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
post({ type: "downloadClick", pageUrl: location.href });
|
||||
},
|
||||
true,
|
||||
);
|
||||
document.documentElement.appendChild(btn);
|
||||
}
|
||||
|
||||
if (btn) {
|
||||
if (!v) {
|
||||
btn.style.display = "none";
|
||||
return;
|
||||
}
|
||||
var r = v.getBoundingClientRect();
|
||||
btn.style.display = "block";
|
||||
btn.style.left = Math.max(8, r.right - btn.offsetWidth - 12) + "px";
|
||||
btn.style.top = Math.max(8, r.bottom - btn.offsetHeight - 12) + "px";
|
||||
}
|
||||
}
|
||||
|
||||
// 播放进度变化时(抖音翻页、切换清晰度)重新定位
|
||||
document.addEventListener("timeupdate", ensureButton, true);
|
||||
window.addEventListener("resize", ensureButton, true);
|
||||
window.addEventListener("scroll", ensureButton, true);
|
||||
document.addEventListener("mouseover", ensureButton, true);
|
||||
|
||||
if (!window.__downloadBtnTimer) {
|
||||
window.__downloadBtnTimer = setInterval(ensureButton, 800);
|
||||
}
|
||||
ensureButton();
|
||||
})();
|
||||
Reference in new issue
Block a user