CefSharp.Wpf.ChromiumWebBrowser SET Window.Name - PullRequest
0 голосов
/ 14 января 2019

Используя браузер CefSharp в приложении WPF, нам нужно передать имя окна (в веб-приложении MVC это просто вопрос установки window.name = 'MyName' в jQuery в представлении), но я не уверен как сделать это с помощью встроенного браузера в WPF перед вызовом .Address

Любые указатели будут оценены :-)

Отметил принятый ответ как ответ на вопрос, обнаружил, что он изменился после загрузки страницы. В конце концов, переход к функции сделал работу, как это

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 голосов
/ 14 января 2019

Вам нужно будет привязать свойство к представлению 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
}

Тогда этот метод вы можете вызвать из javascript вашей HTML-страницы.

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

Если вы не являетесь владельцем HTML-страницы и не можете изменить код страницы, вы можете использовать ExecuteScriptAsync для запуска метода javascript и получения результата в C #.

...