WPF代码:
namespace WPFJsTest { /// <summary> /// Page1.xaml 的交互逻辑 /// </summary> public partial class Page1 : Page { /// <summary> /// JS页面中的JS对象实例,可以访问页面JS中的代码 /// </summary> private dynamic scriptObject = null; public Page1() { InitializeComponent(); // Retrieve the script object. The XBAP must be hosted in a frame or // the HostScript object will be null. if (!BrowserInteropHelper.IsBrowserHosted) { MessageBox.Show("不满足与JS调用条件"); return; } ///判断是不是有js scriptObject = BrowserInteropHelper.HostScript; if (scriptObject != null) { //初始化Html页面中的回调函数的对象,让Html页面中可以调用Wpf内部方法 scriptObject.IniWPFObjectOfHtml(new CallbackClass()); } } private void Button_Click(object sender, RoutedEventArgs e) { if (scriptObject != null) scriptObject.WPFInvokeJS("WPF页面参数"); } } /// <summary> /// 提供给HTML页面JS调用方法的类的实例 /// </summary> [ComVisible(true)] public class CallbackClass { /// <summary> /// JS页面调用的方法 /// </summary> /// <param name="message"></param> public void MyMethod(string message) { MessageBox.Show("JS调用WPF函数 参数:" + message); } } }
HTML代码:
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> <title></title> <meta http-equiv="X-UA-Compatible" content="IE=8" /> <!--不加上这一句,IE9貌似没效果--> <script type="text/javascript"> // 调用WPF的JS函数 function JSInvokeWPF() { if (wpfObj == null) { alert("中间对象为空!"); } else { wpfObj.MyMethod("HTML页面参数"); } } // 供WPF调用的函数 function WPFInvokeJS(parent) { alert("WPF调用JS函数 参数:" + parent); } //Wpf中可以调用方法的对的实例 var wpfObj = null; function IniWPFObjectOfHtml(obj) { wpfObj = obj; } </script> </head> <body> <input id="Button1" type="button" value="调用WPF方法" onclick="JSInvokeWPF();"> <!--在这个地方将Wpf的应用程序插入到Html的界面中--> <iframe src="WPFJsTest.xbap" frameborder="0" marginheight="0" marginwidth="0" style="height:100%; 100%;"></iframe> </body> </html>