mirror of
https://gitee.com/kekingcn/file-online-preview.git
synced 2026-04-12 11:07:23 +00:00
fix: add pdfjs at compatibility polyfill
Agent-Logs-Url: https://github.com/kekingcn/kkFileView/sessions/287f0212-d368-4b59-ae70-0374fb3fe76f Co-authored-by: klboke <18591662+klboke@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
405a12ef07
commit
5499150395
@@ -24,6 +24,7 @@
|
|||||||
* pdfjsVersion = 5.4.530
|
* pdfjsVersion = 5.4.530
|
||||||
* pdfjsBuild = 50cc4adac
|
* pdfjsBuild = 50cc4adac
|
||||||
*/
|
*/
|
||||||
|
import "../web/compatibility.mjs";
|
||||||
/******/ var __webpack_modules__ = ({
|
/******/ var __webpack_modules__ = ({
|
||||||
|
|
||||||
/***/ 34:
|
/***/ 34:
|
||||||
|
|||||||
42
server/src/main/resources/static/pdfjs/web/compatibility.mjs
Normal file
42
server/src/main/resources/static/pdfjs/web/compatibility.mjs
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
const atTargets = [
|
||||||
|
Array,
|
||||||
|
String,
|
||||||
|
Int8Array,
|
||||||
|
Uint8Array,
|
||||||
|
Uint8ClampedArray,
|
||||||
|
Int16Array,
|
||||||
|
Uint16Array,
|
||||||
|
Int32Array,
|
||||||
|
Uint32Array,
|
||||||
|
Float32Array,
|
||||||
|
Float64Array,
|
||||||
|
globalThis.BigInt64Array,
|
||||||
|
globalThis.BigUint64Array,
|
||||||
|
];
|
||||||
|
|
||||||
|
function installAtPolyfill(target) {
|
||||||
|
if (!target?.prototype || typeof target.prototype.at === "function") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Object.defineProperty(target.prototype, "at", {
|
||||||
|
value(index) {
|
||||||
|
const length = this.length >>> 0;
|
||||||
|
let relativeIndex = Number(index) || 0;
|
||||||
|
if (!Number.isFinite(relativeIndex)) {
|
||||||
|
relativeIndex = 0;
|
||||||
|
}
|
||||||
|
relativeIndex = relativeIndex < 0 ? Math.ceil(relativeIndex) : Math.floor(relativeIndex);
|
||||||
|
const resolvedIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;
|
||||||
|
if (resolvedIndex < 0 || resolvedIndex >= length) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
return this[resolvedIndex];
|
||||||
|
},
|
||||||
|
writable: true,
|
||||||
|
configurable: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const target of atTargets) {
|
||||||
|
installAtPolyfill(target);
|
||||||
|
}
|
||||||
@@ -29,6 +29,7 @@ See https://github.com/adobe-type-tools/cmap-resources
|
|||||||
|
|
||||||
<!-- This snippet is used in production (included from viewer.html) -->
|
<!-- This snippet is used in production (included from viewer.html) -->
|
||||||
<link rel="resource" type="application/l10n" href="locale/locale.json" />
|
<link rel="resource" type="application/l10n" href="locale/locale.json" />
|
||||||
|
<script src="compatibility.mjs" type="module"></script>
|
||||||
<script src="../build/pdf.mjs" type="module"></script>
|
<script src="../build/pdf.mjs" type="module"></script>
|
||||||
|
|
||||||
<link rel="stylesheet" href="viewer.css" />
|
<link rel="stylesheet" href="viewer.css" />
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package cn.keking;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
|
public class PdfViewerCompatibilityTests {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldLoadCompatibilityModuleBeforePdfJs() throws IOException {
|
||||||
|
String viewerHtml = readResource("/static/pdfjs/web/viewer.html");
|
||||||
|
|
||||||
|
assert viewerHtml.contains("<script src=\"compatibility.mjs\" type=\"module\"></script>");
|
||||||
|
assert viewerHtml.indexOf("compatibility.mjs") < viewerHtml.indexOf("../build/pdf.mjs");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldLoadCompatibilityModuleInPdfWorker() throws IOException {
|
||||||
|
String workerScript = readResource("/static/pdfjs/build/pdf.worker.mjs");
|
||||||
|
|
||||||
|
assert workerScript.contains("import \"../web/compatibility.mjs\";");
|
||||||
|
}
|
||||||
|
|
||||||
|
private String readResource(String resourcePath) throws IOException {
|
||||||
|
try (InputStream inputStream = getClass().getResourceAsStream(resourcePath)) {
|
||||||
|
assert inputStream != null;
|
||||||
|
return new String(inputStream.readAllBytes(), StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user