首页 > 解决方案 > CefSharp.Wpf.ChromiumWebBrowser SET Window.Name

问题描述

在 WPF 应用程序中使用 CefSharp 浏览器,我们需要传递窗口名称(在 MVC Web 应用程序中,只需在视图上的 jQuery 中设置 window.name = 'MyName'),但我不知道该怎么做在调用 .Address 之前使用 WPF 中的嵌入式浏览器

任何指针将不胜感激:-)

将接受的答案标记为确实回答了问题,只是发现它在页面加载后发生了变化。最后传递给一个函数完成了这项工作,就像这样

Private Sub FrameLoaded(sender As Object, e As CefSharp.FrameLoadEndEventArgs)
    Try
        Me.Dispatcher.Invoke(Sub()
                                 Dim vBrowser As CefSharp.Wpf.ChromiumWebBrowser = WebsiteLogin_Grid.FindName("WebsiteLogin_WebBrowser")
                                 vBrowser.ExecuteScriptAsync("loadFromManager(" & Current_ID & "); ")
                             End Sub)

    Catch ex As Exception
        EmailError(ex)
    End Try
End Sub

标签: wpfchromium-embedded

解决方案


您必须将属性绑定到 WPF 视图,如下所示。

<Window x:Class="CefSharp.MinimalExample.Wpf.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wpf="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
        xmlns:cef="clr-namespace:CefSharp;assembly=CefSharp.Core"
        xmlns:behaviours="clr-namespace:CefSharp.MinimalExample.Wpf.Behaviours"
        xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 
        Title="{Binding Path=Title, ElementName=Browser, Converter={StaticResource TitleConverter}}"
        WindowState="Maximized">

</Window>

转换器代码将如下所示:

public class TitleConverter : IValueConverter
{
    object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return "value ?? "No Title Specified";
    }

    object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return Binding.DoNothing;
    }
}

请参阅github 上的此文档。

如果你想要 window.name 或任何其他属性,解决方案是注册 JS 对象:

webBrowser.RegisterJsObject("cefCallback", new JavascriptAdapter());

在 JavascriptAdapter 类中,您可以创建一个方法

public void SetWindowName(string name)
{
 //// your code
}

然后,您可以从 HTML 页面的 javascript 调用此方法。

  window["cefCallback].setWindowName(window.name);

如果您不拥有 HTML 页面并且无法更改页面代码,则可以使用 ExecuteScriptAsync 运行 javascript 方法并在 C# 中获取结果。


推荐阅读