我一直在寻找一个关于如何使用WPF和Awesomium 1.7.5从html元素打开记事本.exe等进程的示例。这个想法是,据我所知,单击html元素会使用javascript触发C#方法。但是,我能找到的所有示例都是指现在使用过时函数的早期版本......
任何人都可以为我提供一个在触发 openNotepad() 时如何执行 C# 代码的示例吗?
.HTML:
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<button onclick="app.openNotepad()">This button will open Notepad</button>
</body>
</html>
C#:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
webControl.Source = new Uri("index.html");
}
private void webControl_DocumentReady(object sender, DocumentReadyEventArgs e)
{
BindMethods(webControl);
}
private void BindMethods(IWebView _webView)
{
JSValue result = webControl.CreateGlobalJavascriptObject("app");
if (result.IsObject)
{
JSObject appObject = result;
appObject.Bind("openNotepad", openNotepad);
}
}
private JSValue openNotepad(object obj, JavascriptMethodEventArgs jsMethodArgs)
{
Process.Start("notepad.exe");
return null;
}
}
XAML:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:awe="http://schemas.awesomium.com/winfx" x:Class="Omega.MainWindow"
Title="Omega" Height="350" Width="525" WindowStartupLocation="CenterScreen" WindowState="Maximized" ResizeMode="NoResize" Topmost="True" WindowStyle="None">
<Grid>
<awe:WebControl x:Name="webControl" DocumentReady="webControl_DocumentReady" />
</Grid>
</Window>
根据 Awesomium 文档 to Bind 和 JavascriptMethodHandler,处理 Javascript 事件的方法在 1.7.5 版本中发生了变化。
JavascriptMethodEventHandler 现已过时,应该使用新的 Bind 重载。
现在,您的代码可能如下所示
private void BindMethods(IWebView _webView)
{
JSValue result = webControl.CreateGlobalJavascriptObject("app");
if (result.IsObject)
{
JSObject appObject = result;
appObject.Bind("openNotepad", openNotepad);
}
}
private JSValue openNotepad(object obj, JavascriptMethodEventArgs jsMethodArgs)
{
Process.Start("notepad.exe");
return null;
}
请注意,在绑定文档页面的末尾有使用新重载的示例。
另请注意,示例中的 javascript 方法实际上并没有调用app.openNotepad()
方法,而是alert("Run Notepad");
WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run("c:/windows/system32/notepad.exe", 1, false);