在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
答案 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#中获取结果。