1. 程式人生 > >在AxWebBrowser控制元件裡面讓網頁與客戶端互動(wcf或ComVisible)

在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);