CefSharp.Wpf.ChromiumWebBrowser SET Window.Name

时间:2019-01-14 18:58:20

标签: wpf chromium-embedded

在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

1 个答案:

答案 0 :(得分:1)

您将必须将该属性绑定到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;
    }
}

推荐this documentation at 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#中获取结果。