对话框
本指南展示了如何处理显示各种对话框的请求。
默认情况下,如果您使用没有关联 BrowserView
的 Browser
,DotNetBrowser 不会显示对话框。 它被设置为静默模式,其中所有对话框都会自动关闭,就好像用户点击了对话框中的取消按钮一样。
要更改默认行为,请为特定对话框注册您自己的适当处理程序的实现。 在您的实现中,您可以决定如何显示对话框并将结果提供给引擎。 您还可以使用给定参数创建和显示每个对话框。
JavaScript 对话框
Alert(警报)
调用 window.alert()
函数时会显示 JavaScript 警报对话框。 我们为此使用 AlertHandler
。
在此处理程序中,您可以获得对话框参数,例如标题、消息、”OK”操作的本地化文本。
browser.JsDialogs.AlertHandler =
new Handler<AlertParameters>(p =>
{
// 对话框标题。
string title = p.Title;
// 对话框消息。
string message = p.Message;
// "OK"处理程序操作的本地化文本。
string okActionText = p.OkActionText;
// 如有必要,创建并显示对话框。
/*
对话框关闭后,立即从处理程序
返回执行。
*/
});
browser.JsDialogs.AlertHandler =
New Handler(Of AlertParameters)(Sub(p)
' 对话框标题。
Dim title As String = p.Title
' 对话框消息。
Dim message As String = p.Message
' "OK"处理程序操作的本地化文本。
Dim okActionText As String = p.OkActionText
' 如有必要,创建并显示对话框。
' 对话框关闭后,立即从处理程序
' 返回执行。
End Sub)
JavaScript 执行将被阻止,直到警报对话框关闭。
确认
调用 window.confirm()
函数时会显示 JavaScript 确认对话框。 我们为此使用 ConfirmHandler
。
在此处理程序中,您可以获得对话框参数,例如标题、消息、”Yes”和”No”操作的本地化文本。 请参阅以下代码示例:
browser.JsDialogs.ConfirmHandler =
new Handler<ConfirmParameters, ConfirmResponse>(p =>
{
// 对话框标题。
string title = p.Title;
// 对话框消息。
string message = p.Message;
// "OK"操作的本地化文本。
string okActionText = p.OkActionText;
// "Cancel"操作的本地化文本。
string cancelActionText = p.CancelActionText;
// 如有必要,创建并显示对话框。
// 对话框关闭后,立即从处理程序
// 返回执行。
return ConfirmResponse.Ok();
});
browser.JsDialogs.ConfirmHandler =
New Handler(Of ConfirmParameters, ConfirmResponse)(Function(p)
' 对话框标题。
Dim title As String = p.Title
' 对话框消息。
Dim message As String = p.Message
' "OK"操作的本地化文本。
Dim okActionText As String = p.OkActionText
' "Cancel"操作的本地化文本。
Dim cancelActionText As String = p.CancelActionText
' 如有必要,创建并显示对话框。
' 对话框关闭后,立即从处理程序
' 返回执行。
Return ConfirmResponse.Ok()
End Function)
JavaScript 执行将被阻止,直到确认对话框关闭。
提示
调用 window.prompt()
函数时会显示 JavaScript 提示对话框。 我们为此使用 PromptHandler
。
在此处理程序中,您可以获得对话框参数,例如标题、消息、文本、”OK”和”Cancel”操作的本地化文本。 请参阅以下代码示例:
browser.JsDialogs.PromptHandler =
new Handler<PromptParameters, PromptResponse>(p =>
{
// 对话框标题。
string title = p.Title;
// 对话框消息。
string message = p.Message;
// "OK"操作的本地化文本。
string okActionText = p.OkActionText;
// "Cancel"操作的本地化文本。
string cancelActionText = p.CancelActionText;
// 如有必要,创建并显示对话框。
// 对话框关闭后,立即从处理程序
// 返回执行。
return PromptResponse.SubmitText(responseText);
});
browser.JsDialogs.PromptHandler =
New Handler(Of PromptParameters, PromptResponse)(Function(p)
' 对话框标题。
Dim title As String = p.Title
' 对话框消息。
Dim message As String = p.Message
' "OK"操作的本地化文本。
Dim okActionText As String = p.OkActionText
' "Cancel"操作的本地化文本。
Dim cancelActionText As String = p.CancelActionText
' 如有必要,创建并显示对话框。
' 对话框关闭后,立即从处理程序
' 返回执行。
Return PromptResponse.SubmitText(responseText)
End Function)
JavaScript 执行将被阻止,直到提示对话框关闭。
卸载前
onbeforeunload
事件在网页即将被卸载时触发。 此事件允许您在确认对话框中显示一条消息,以通知用户他们是想留在当前页面还是离开。
要显示确认对话框,请使用 BeforeUnloadHandler
。
关闭 IBrowser
实例时不会调用此处理程序。
在此处理程序中,您可以获得对话框参数,例如标题、消息、”Stay” 和 “Leave” 操作的本地化文本。 请参阅以下代码示例:
browser.JsDialogs.BeforeUnloadHandler =
new Handler<BeforeUnloadParameters, BeforeUnloadResponse>(p =>
{
// 对话框标题。
string title = p.Title;
// 对话框消息。
string message = p.Message;
// "Stay" 操作的本地化文本。
string stayActionText = p.StayActionText;
// "Leave"操作的本地化文本。
string leaveActionText = p.LeaveActionText;
// 如有必要,创建并显示对话框。
// ...
// 已选择 "Stay" 操作。
return BeforeUnloadResponse.Stay();
});
browser.JsDialogs.BeforeUnloadHandler =
New Handler(Of BeforeUnloadParameters, BeforeUnloadResponse)(Function(p)
' 对话框标题。
Dim title As String = p.Title
' 对话框消息。
Dim message As String = p.Message
' "Stay" 操作的本地化文本。
Dim stayActionText As String = p.StayActionText
' "Leave"操作的本地化文本。
Dim leaveActionText As String = p.LeaveActionText
' 如有必要,创建并显示对话框。
' ...
' 已选择 "Stay" 操作。
Return BeforeUnloadResponse.Stay()
End Function)
选择颜色
当用户单击具有 color
类型的 input
元素时,可以显示该对话框。 我们为此使用 SelectColorHandler
,如下面的代码示例所示:
<input type="color" value="#ff0000">
在此处理程序中,您可以获得默认颜色等对话框参数。 例如:
browser.Dialogs.SelectColorHandler =
new Handler<SelectColorParameters, SelectColorResponse>(p =>
{
Color defaultColor = p.DefaultColor;
return SelectColorResponse.SelectColor(new Color(1, 0, 0));
});
browser.Dialogs.SelectColorHandler =
New Handler(Of SelectColorParameters, SelectColorResponse)(Function(p)
Dim defaultColor As Color = p.DefaultColor
Return SelectColorResponse.SelectColor(New Color(1, 0, 0))
End Function)
打开一个文件
当网页希望用户从其设备存储中选择文件时,就会使用OpenFileHandler
。 当用户单击具有 file
类型的 input
元素时,就会发生这种情况:
<input type="file" accept="image/png, image/jpeg">
在此处理程序中,您可以获得对话框参数,如默认文件名、可接受的文件扩展和可接受的文件扩展的说明。 例如:
browser.Dialogs.OpenFileHandler =
new Handler<OpenFileParameters, OpenFileResponse>(parameters =>
{
// 默认文件名。
string defaultFileName = parameters.DefaultFileName;
// 可接受的扩展。
IEnumerable<string> acceptableExtensions = parameters.AcceptableExtensions;
// ...
// 应打开给定文件。
return OpenFileResponse.SelectFile(Path.GetFullPath("<path-to-selected-file>"));
});
browser.Dialogs.OpenFileHandler =
New Handler(Of OpenFileParameters, OpenFileResponse)(Function(parameters)
' 默认文件名。
Dim defaultFileName As String = parameters.DefaultFileName
' 可接受的扩展。
Dim acceptableExtensions As IEnumerable(Of String) =
parameters.AcceptableExtensions
' ...
' 应打开给定文件。
Return OpenFileResponse.SelectFile(Path.GetFullPath("<path-to-selected-file>"))
End Function)
打开多个文件
当网页要求用户从设备存储中选择多个文件时,就会使用 “OpenMultipleFilesHandler”。 当用户单击具有 file
类型和 multiple
属性的 input
元素时,就会发生这种情况:
<input type="file" accept="image/png, image/jpeg" multiple>
在此处理程序中,您可以获得对话框参数,如默认文件名、可接受的文件扩展和可接受的文件扩展的说明。 请参阅以下代码示例:
browser.Dialogs.OpenMultipleFilesHandler =
new Handler<OpenMultipleFilesParameters, OpenMultipleFilesResponse>(parameters =>
{
// 可接受的扩展。
IEnumerable<string> acceptableExtensions = parameters.AcceptableExtensions;
// ...
string file1 = Path.GetFullPath("<path-to-selected-file1>");
string file2 = Path.GetFullPath("<path-to-selected-file2>");
return OpenMultipleFilesResponse.SelectFiles(file1, file2);
});
browser.Dialogs.OpenMultipleFilesHandler =
New Handler(Of OpenMultipleFilesParameters,
OpenMultipleFilesResponse)(Function(parameters)
' 可接受的扩展。
Dim acceptableExtensions As IEnumerable(Of String) =
parameters.AcceptableExtensions
' ...
Dim file1 As String = Path.GetFullPath("<path-to-selected-file1>")
Dim file2 As String = Path.GetFullPath("<path-to-selected-file2>")
Return OpenMultipleFilesResponse.SelectFiles(file1, file2)
End Function)
打开一个文件夹
当 Chromium 希望用户从他们的设备存储中选择一个文件夹时,就会使用 OpenDirectoryHandler
。
如有必要,您可以创建并显示一个对话框,用户可以在其中选择文件夹。 当对话框关闭时,必须返回 OpenDirectoryResponse
实例。 请参阅以下代码示例:
browser.Dialogs.OpenDirectoryHandler =
new Handler<OpenDirectoryParameters, OpenDirectoryResponse>(parameters =>
{
// ...
string directory = Path.GetFullPath("<path-to-directory>");
return OpenDirectoryResponse.SelectDirectory(directory);
});
browser.Dialogs.OpenDirectoryHandler =
New Handler(Of OpenDirectoryParameters, OpenDirectoryResponse)(Function(parameters)
' ...
Dim directory As String = Path.GetFullPath("<path-to-directory>")
Return OpenDirectoryResponse.SelectDirectory(directory)
End Function)
另存为 PDF
通过打印预览对话框将网页另存为 PDF 文档时,将使用 SaveAsPdfHandler
。
在此处理程序中,您可以获得对话框参数,如默认文件名。 请参阅以下代码示例:
browser.Dialogs.SaveAsPdfHandler =
new Handler<SaveAsPdfParameters, SaveAsPdfResponse>(parameters =>
{
// ...
// 应保存给定文件。
string pdfFile = Path.GetFullPath("<path-to-file>");
return SaveAsPdfResponse.SaveToFile(pdfFile);
});
browser.Dialogs.SaveAsPdfHandler =
New Handler(Of SaveAsPdfParameters, SaveAsPdfResponse)(Function(parameters)
' ...
' 应保存给定文件。
Dim pdfFile As String = Path.GetFullPath("<path-to-file>")
Return SaveAsPdfResponse.SaveToFile(pdfFile)
End Function)
选择客户端证书
当 Chromium 希望用户从可用证书列表中选择客户端 SSL 证书时,将使用 SelectCertificateHandler
。
在此处理程序中,您可以获得对话框参数,如对话框标题、消息、可用证书列表。 请参阅以下代码示例:
browser.SelectCertificateHandler =
new Handler<SelectCertificateParameters, SelectCertificateResponse>(p =>
{
// 对话框标题。
string title = p.Title;
// 对话框消息。
string message = p.Message;
// 可用的 SSL 证书。
IEnumerable<Certificate> certificates = p.Certificates;
// ...
// 已选择列表中的最后一个证书。
return SelectCertificateResponse.Select(p.Certificates.Count() - 1);
});
browser.SelectCertificateHandler =
New Handler(Of SelectCertificateParameters, SelectCertificateResponse)(Function(p)
' 对话框标题。
Dim title As String = p.Title
' 对话框消息。
Dim message As String = p.Message
' 可用的 SSL 证书。
Dim certificates As IEnumerable(Of Certificate) = p.Certificates
' ...
' 已选择列表中的最后一个证书。
Return SelectCertificateResponse.Select(p.Certificates.Count() - 1)
End Function)
打开外部应用程序
当用户导航到具有与操作系统中安装的应用程序相关联的方案的 URL 时,Chromium 会尝试在此外部应用程序中打开链接。 OpenExternalAppHandler
用于确定是否应在外部应用程序中打开链接。
在此处理程序中,您可以获得对话框参数,如本地化标题、消息以及”Open…“和”Cancel”操作的文本。
例如,这里展示了如何在不显示任何对话框的情况下取消打开链接:
browser.Dialogs.OpenExternalAppHandler =
new Handler<OpenExternalAppParameters, OpenExternalAppResponse>(p =>
{
return OpenExternalAppResponse.Cancel();
});
browser.Dialogs.OpenExternalAppHandler =
New Handler(Of OpenExternalAppParameters, OpenExternalAppResponse)(Function(p)
Return OpenExternalAppResponse.Cancel()
End Function)