(转)WPF与JS 函数、回调函数调用

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>  
原文地址:https://www.cnblogs.com/kimiGuo/p/7117914.html