六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 610|回复: 0

javascript与Windows Presentation Foundation交互通讯(js与wpf通讯)

[复制链接]

升级  16%

2

主题

2

主题

2

主题

童生

Rank: 1

积分
8
 楼主| 发表于 2013-1-3 15:38:36 | 显示全部楼层 |阅读模式
<div id="cnblogs_post_body">wpf设置
1.给主程序类添加标签特性:  [System.Runtime.InteropServices.ComVisible(true)]
如:  [System.Runtime.InteropServices.ComVisible(true)]   
public partial class MainWindow : Window
2.定义webbrowser导向网址:  
webMain.Navigate(@"http://10.0.0.86:81");  
webMain.Navigate(new Uri(@"E:\visual studio 2012\ShineHATMV1.0\WpfApp\testInterface.html", UriKind.RelativeOrAbsolute));
3.从wpf推送的页面函数及参数
webMain.Dispatcher.Invoke(new Action(() => { webMain.ObjectForScripting = this; webMain.InvokeScript("funName",new object[]{"paras"}); }));  
方法名称:funName,参数:paras    页面中必须有同名同类型的参数;
4.从页面js调用wpf方法  页面js调用
window.external.CallBll("test");
wpf中:  需要提前定义好一个 接受类
//前台js调用后台js方法
  [System.Runtime.InteropServices.ComVisible(true)]  
public class JSCallBack{}   
在初始化一下 这个类
JSCallBack jscall = new JSCallBack(this);  
webMain.ObjectForScripting = jscall;   
在类中定义好接收方法
//前台调用方法        
public string CallBll(string type){}
5.注意 wpf 需在 webbrowser的LoadCompleted 事件执行之后才能使用 js 与 wpf 的相互之间的调用,winform没有验证
详细代码:
wpf:
<div class="cnblogs_code" >View Code <div id="cnblogs_code_open_3694b2e9-6c4f-4fda-94df-f713e4faa887" class="cnblogs_code_hide">namespace WpfApp{    /// <summary>    /// MainWindow.xaml 的交互逻辑    /// </summary>    [System.Runtime.InteropServices.ComVisible(true)]    public partial class MainWindow : Window    {        public MainWindow()        {            InitializeComponent();            //webMain.Navigate(@"http://10.0.0.86:81");            webMain.Navigate(new Uri(@"E:\visual studio 2012\ShineHATMV1.0\WpfApp\testInterface.html", UriKind.RelativeOrAbsolute));        }        private void btrInCard_Click(object sender, RoutedEventArgs e)        {            CallBackEvent("bank");        }        private void Button_Click_1(object sender, RoutedEventArgs e)        {            JSCallBack jscall = new JSCallBack(this);            webMain.ObjectForScripting = jscall;        }        //向前台 推送方法        void CallBackEvent(string type)        {            //function callbackEvent(isok, value, status, code, msg, fun)            //isok:0 失败 1 成功            //type:bankPwd            //value:bankNo:12345679,name:张三,ablance:500            //msg:提示信息            switch (type)            {                case "test":                    webMain.Dispatcher.Invoke(new Action(() => { webMain.ObjectForScripting = this; webMain.InvokeScript("test"); }));                    break;                case "bank":                    webMain.Dispatcher.Invoke(new Action(() => { webMain.ObjectForScripting = this; webMain.InvokeScript("callbackEvent", new object[] { 1, "bankPwd", "bankNo:6221881900006135513$$bankName:农业银行", "" }); }));                    break;                default:                    break;            }        }    }    //前台js调用后台js方法    [System.Runtime.InteropServices.ComVisible(true)]    public class JSCallBack    {        MainWindow mainWindow;        public JSCallBack(MainWindow main)        {            mainWindow = main;        }        //前台调用方法        public string CallBll(string type, int isOk, string paras)        {            switch (type)            {                case "inputBankPwd":                    break;                case "bank":                    break;                default:                    break;            }            return "test";        }    }}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表