Skip to content

Commit 61a7436

Browse files
authored
#1236: Improve PDF password prompt cancellation handling (#1255)
Added OnDocumentLoadError callback in Blazor to hide the PDF viewer on load errors. Updated JS to detect password prompt cancellation, destroy loading task, and notify Blazor, preventing repeated prompts and improving user experience.
1 parent b494cf4 commit 61a7436

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
@if (showPdfViewer)
22
{
3-
<PdfViewer Class="mb-3" Url="@($"../{DemoStringConstants.StaticAssets_Docs_Path}/pdf_password_protected.pdf")" PromptForPassword="true" />
3+
<PdfViewer Class="mb-3"
4+
Url="@($"../{DemoStringConstants.StaticAssets_Docs_Path}/pdf_password_protected.pdf")"
5+
OnDocumentLoadError="OnDocumentLoadError" />
46
}
57
else
68
{
@@ -9,4 +11,6 @@ else
911

1012
@code {
1113
private bool showPdfViewer = false;
14+
15+
private void OnDocumentLoadError(string errorMessage) => showPdfViewer = false;
1216
}

blazorbootstrap/wwwroot/blazor.bootstrap.pdf.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,15 +210,30 @@ export function initialize(dotNetHelper, elementId, scale, rotation, url, passwo
210210

211211
// begin loading document
212212
const loadingTask = pdfJS.getDocument(options);
213+
let passwordPromptCanceled = false;
213214

214215
// handle password only when required (optional password support)
215216
loadingTask.onPassword = function (updatePassword, reason) {
217+
if (passwordPromptCanceled) return;
218+
216219
if (reason === pdfJS.PasswordResponses.NEED_PASSWORD) {
217220
// only prompt if PDF actually requires password
218221
const password = prompt("This PDF is password protected. Enter password:");
222+
if (password === null) {
223+
passwordPromptCanceled = true;
224+
loadingTask.destroy();
225+
dotNetHelper.invokeMethodAsync('DocumentLoadError', "Password prompt canceled.");
226+
return;
227+
}
219228
updatePassword(password);
220229
} else if (reason === pdfJS.PasswordResponses.INCORRECT_PASSWORD) {
221230
const password = prompt("Incorrect password. Please try again:");
231+
if (password === null) {
232+
passwordPromptCanceled = true;
233+
loadingTask.destroy();
234+
dotNetHelper.invokeMethodAsync('DocumentLoadError', "Password prompt canceled.");
235+
return;
236+
}
222237
updatePassword(password);
223238
}
224239
};

0 commit comments

Comments
 (0)