Skip to content

Commit ae60266

Browse files
committed
Update Picviewer CE+.user.js
1 parent b71c44f commit ae60266

File tree

1 file changed

+33
-9
lines changed

1 file changed

+33
-9
lines changed

Picviewer CE+/Picviewer CE+.user.js

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
// @description:ja 画像を強力に閲覧できるツール。ポップアップ表示、拡大・縮小、回転、一括保存などの機能を自動で実行できます
1313
// @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente
1414
// @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения
15-
// @version 2025.7.27.1
15+
// @version 2025.7.29.1
1616
// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg==
1717
// @namespace https://github.com/hoothin/UserScripts
1818
// @homepage https://github.com/hoothin/UserScripts/tree/master/Picviewer%20CE%2B
@@ -14722,7 +14722,7 @@ ImgOps | https://imgops.com/#b#`;
1472214722
media = document.createElement('audio');
1472314723
src = "audio:" + src;
1472414724
} else if (file.type.indexOf("video") === 0) {
14725-
media = document.createElement('video');
14725+
media = createVideo();
1472614726
src = "video:" + src;
1472714727
} else continue;
1472814728
media.title = file.name;
@@ -15630,7 +15630,7 @@ ImgOps | https://imgops.com/#b#`;
1563015630
media = document.createElement('audio');
1563115631
src = "audio:" + src;
1563215632
} else if (file.type.indexOf("video") === 0) {
15633-
media = document.createElement('video');
15633+
media = createVideo();
1563415634
src = "video:" + src;
1563515635
} else continue;
1563615636
media.src = src;
@@ -16217,7 +16217,7 @@ ImgOps | https://imgops.com/#b#`;
1621716217
}
1621816218
switch (mode) {
1621916219
case "video":
16220-
media = document.createElement('video');
16220+
media = createVideo();
1622116221
media.style.width = 0;
1622216222
media.style.height = 0;
1622316223
media.controls = true;
@@ -16620,7 +16620,7 @@ ImgOps | https://imgops.com/#b#`;
1662016620
media.removeEventListener('loadeddata', loaded);
1662116621
}
1662216622
if (isVideoLink(src)) {
16623-
media = document.createElement('video');
16623+
media = createVideo();
1662416624
media.style.width = 0;
1662516625
media.style.height = 0;
1662616626
media.controls = true;
@@ -23324,7 +23324,7 @@ ImgOps | https://imgops.com/#b#`;
2332423324
} else {
2332523325
switch (mode) {
2332623326
case "video":
23327-
media = document.createElement('video');
23327+
media = createVideo();
2332823328
media.style.width = 0;
2332923329
media.style.height = 0;
2333023330
media.controls = true;
@@ -25661,7 +25661,7 @@ ImgOps | https://imgops.com/#b#`;
2566125661
return;
2566225662
}
2566325663
if (curLoadingMedia && curLoadingMedia.src == e.blockedURI) {
25664-
GM_xmlhttpRequest({
25664+
_GM_xmlhttpRequest({
2566525665
method: 'GET',
2566625666
url: curLoadingMedia.src,
2566725667
responseType: 'blob',
@@ -25670,15 +25670,39 @@ ImgOps | https://imgops.com/#b#`;
2567025670

2567125671
curLoadingMedia.src = blobUrl;
2567225672
curLoadingMedia.load();
25673-
videoElement.play().catch(err => console.warn('[CSP Fixer] Autoplay after fix was blocked.', err));
25673+
curLoadingMedia.play().catch(err => console.warn('[CSP Fixer] Autoplay after fix was blocked.', err));
2567425674

2567525675
const releaseBlob = () => URL.revokeObjectURL(blobUrl);
25676-
videoElement.addEventListener('ended', releaseBlob);
25676+
curLoadingMedia.addEventListener('ended', releaseBlob);
2567725677
window.addEventListener('beforeunload', releaseBlob);
2567825678
}
2567925679
});
2568025680
}
2568125681
});
25682+
function createVideo() {
25683+
let media = document.createElement('video');
25684+
media.addEventListener('error', e => {
25685+
if (/^blob:/.test(media.src)) return;
25686+
_GM_xmlhttpRequest({
25687+
method: 'GET',
25688+
url: media.src,
25689+
responseType: 'blob',
25690+
onload: function(response) {
25691+
const blobUrl = URL.createObjectURL(response.response);
25692+
25693+
media.src = blobUrl;
25694+
media.load();
25695+
media.play().catch(err => console.warn('[CSP Fixer] Autoplay after fix was blocked.', err));
25696+
25697+
const releaseBlob = () => URL.revokeObjectURL(blobUrl);
25698+
media.addEventListener('ended', releaseBlob);
25699+
window.addEventListener('beforeunload', releaseBlob);
25700+
curLoadingMedia = null;
25701+
}
25702+
});
25703+
});
25704+
return media;
25705+
}
2568225706

2568325707
async function input(sel, v) {
2568425708
await new Promise((resolve) => {

0 commit comments

Comments
 (0)