我正在尝试在 React 中渲染 base64pdf,但在部署时出现此错误。
Refused to connect to 'data:application/pdf;base64,JVB....' because it violates the following Content Security Policy directive: "connect-src 'self' https://www.google.com/inputtools/request https://dpm.demdex.net/
base64 没有从任何地方拉出来,我已经用 npm 安装了 pdfjs-dist。有没有办法在不更改任何内容安全策略的情况下解决这个问题?谢谢!
import pdfjs from "pdfjs-dist";
import pdfjsWorker from "pdfjs-dist/build/pdf.worker.entry";
...
export const PDFViewer: FC<Props> = ({ base64 = "" }) => {
const canvasRef = useRef<HTMLCanvasElement>(null);
const [loading, setLoading] = useState<boolean>(true);
const [error, setError] = useState<boolean>(false);
const renderPdf = useCallback(async () => {
const loadingTask = pdfjs.getDocument(base64);
try {
const loadedPdf = await loadingTask.promise;
const pdfPage = await loadedPdf.getPage(1);
const viewport = pdfPage.getViewport({ scale: 1.5 });
const canvas = canvasRef.current;
if (canvas) {
canvas.height = viewport.height;
canvas.width = viewport.width;
const renderContext = {
canvasContext: canvas.getContext("2d") as CanvasRenderingContext2D,
viewport: viewport
};
setLoading(false);
pdfPage.render(renderContext);
}
} catch (e) {
setLoading(false);
setError(true);
}
}, [base64]);
useEffect(() => {
renderPdf();
}, [base64]);
const hasLoadOrError = loading || error;
return (
<div className="pdf-viewer">
{loading && <Spinner className="spinner" />}
{error && <PDFIcon data-testid="pdf-icon" />}
<div
data-testid="pdf-container"
className={hasLoadOrError ? "hide" : "show"}
>
<canvas height="0" width="0" ref={canvasRef} />
</div>
</div>
);
};