wpf - 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
解决方案
您必须将属性绑定到 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;
}
}
如果你想要 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# 中获取结果。
推荐阅读
- c# - 在 For 循环中运行的异步任务:System.ArgumentOutOfRangeException
- j - 在 J 中,我们如何生成来自具有指定均值和方差的正态分布的数字列表
- python - 使用 Telebot 检索任何用户的 ID
- r - 用R中的中位数替换用逗号分隔的数字字符串
- python - Pandas 数据框多索引索引
- java - 如何使用 intent.setData() 更改系统设置?
- operating-system - 为什么写被认为是输入操作而读被认为是输出操作?
- javascript - 谷歌脚本 - 通过电子邮件发送表格,其中包含来自循环的值
- yaml - 使用别名和 yamlordereddictloader 加载程序时未保留 YAML 映射顺序
- amazon-web-services - 如何使用 apache camel 以 json 格式发送从 aws s3 下载的文件的内容?