I was developing a desktop app in WPF and where I need to
call C# function from Javascript.
I searched and found a post. I know there are so many posts
are available on web but I am sharing this only to add one more resource so no
one take time to solve their problem.
Very first, below XAML code.
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow"
Height="350" Width="525">
<Grid Name="GrdMain">
</Grid>
</Window>
Now code behind,
public partial class MainWindow :
Window
{
// This nested class must be ComVisible for the JavaScript
to be able to call it.
[System.Runtime.InteropServices.ComVisible(true)]
public class ScriptManager
{
// Variable to store the form of type Form1.
private MainWindow
ParantWindow;
// Constructor.
public ScriptManager(MainWindow
form)
{
// Save the form so it can be referenced
later.
ParantWindow = form;
}
// This method can be called from JavaScript.
public void
MethodToCallFromScript()
{
// Call a method on the form.
ParantWindow.AlertMessage();
}
// This method can also be called from JavaScript.
public void
AnotherMethod(string message)
{
MessageBox.Show(message);
}
}
public void
AlertMessage()
{
// Indicate success.
MessageBox.Show("Hey!
worked.");
}
public MainWindow()
{
InitializeComponent();
WebBrowser web = new
WebBrowser();
// Set the WebBrowser to use an instance of the
ScriptManager to handle method calls to C#.
web.ObjectForScripting = new ScriptManager(this);
// Create the webpage.
String HTMLText = @"<html>
<head>
<title>Test</title>
</head>
<body>
<input
type=""button"" value=""Go!""
onclick=""window.external.MethodToCallFromScript();"" />
<br />
<input
type=""button"" value=""Go Again!""
onclick=""window.external.AnotherMethod('Hello, How are
you?');"" />
</body>
</html>";
web.NavigateToStream(new System.IO.MemoryStream(Encoding.ASCII.GetBytes(HTMLText)));
GrdMain.Children.Add(web);
}
}
What happened here, There is no way to communicate between
application and web browse object.
So to solve this problem I created one class which contains
the object of our main window form. Now we’ll pass that class to web object and
in web object our javascript resides.
Hope you like this post.
Enjoy coading…
Thanks.