在AxWebBrowser控件里面让网页与客户端交互(wcf或ComVisible)

1 使用Wcf暴露服务

 [ServiceContract]
    public interface IOperateSevice
    {
        /// <summary>
        /// 保存信息到InsuranceClient主程序
        /// </summary>
        /// <param name="res"></param>
        /// <param name="curInsCompInfo"></param>
        [OperationContract]
        void SaveInfo(compAndChannelResponse[] res, InsCompInfo curInsCompInfo);

    }

 2 注册服务暴露在进程里面

        public static IOperateSevice GetSevice()
        {
            NetNamedPipeBinding binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
            binding.MaxReceivedMessageSize = 2147483647;
            binding.CloseTimeout = TimeSpan.FromMinutes(3);
            binding.OpenTimeout = TimeSpan.FromMinutes(3);
            binding.ReceiveTimeout = TimeSpan.FromMinutes(3);
            binding.SendTimeout = TimeSpan.FromMinutes(3);
            EndpointAddress addr = new EndpointAddress("net.pipe://localhost/Client/WCFSevice");
            ChannelFactory<IOperateSevice> cf = new ChannelFactory<IOperateSevice>(binding, addr); 
            return cf.CreateChannel();
        }

3 直接通过js调用

方法二 

(1)在webBrowser  里面和网页交互

1   在被调用方法类上加上[ComVisible(true)]标签,意思就是当前类可以com组件的形式供外包调用

   [ComVisible(true)]
    public partial class WebBrowserForm{
}

2 使用pubilc公开方法提供js调用

  public void xmpf(string name)
        {

            messageBox.Show(name);

        }

在类的构造函数里加载页面代码:

  public WebBrowserForm()
        {
            InitializeComponent();      
            string pathName = Application.StartupPath + "\\" + "test.html";
            this.webBrowser2.ObjectForScripting = this;
            webBrowser2.Navigate(pathName);
        }

4 使用js调用

  window.external.xmpf(obj.name,obj.value, obj.checked);

(2)在AxWebBrowserForm与网页交互

1在被调用方法类上加上[ComVisible(true)]标签,意思就是当前类可以com组件的形式供外包调用,并赋予别名

再通过ComDefaultInterface指定公开的接口类型

    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None), ProgId("myExtension"), ComDefaultInterface(typeof(InsuranceHelper.NativeMethods.IExtension))]
    public partial class AxWebBrowserForm:IExtension
    {
    }

2 公开类型IExtension


    [ComVisible(true), Guid("4C1D2E51-018B-4A7C-8A07-618452573E42"), InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IExtension
    {
        [DispId(1)]
        void Submit(string tNo);
}

3 在form里面添加public此类型的方法

   void IExtension.Submit(string tNo)
        {
             
        }

4 在js里面添加

  window.myExtension.Submit(tNo);  

猜你喜欢

转载自blog.csdn.net/qq_25744257/article/details/83827915