对话框

本指南展示了如何处理显示各种对话框的请求。

默认情况下,如果您使用没有关联 BrowserViewBrowser ,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)
Go Top