zoukankan      html  css  js  c++  java
  • C#使用Microsoft Edge WebView2记录

    一、C#和JS互相调用 

    1、js调用C# 

     C#代码如下:

     webView.CoreWebView2.AddHostObjectToScript("webBrowserObj", new ScriptCallbackObject());

     await webView.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync("var webBrowserObj= window.chrome.webview.hostObjects.webBrowserObj;");

     像网页里面注入变量,这样网页调用时候不用每次写window.chrome.webview.hostObjects.webBrowserObj调用,最主要的是为了兼容之前cef里面Js的写法。

        [ClassInterface(ClassInterfaceType.AutoDual)]
        [ComVisible(true)]
        /// <summary>
        /// 网页调用C#方法
        /// </summary>
        public class ScriptCallbackObject
        {
            public string UserName { get; set; } = "我是C#属性";
    
            public void ShowMessage()
            {
                MessageBox.Show("网页调用C#");
            }
    
            public void ShowMessageArg(string arg)
            {
                MessageBox.Show("【网页调用C#】:" + arg);
            }
    
            public string GetData(string arg)
            {
                return "【网页调用C#获取数据】;" + arg;
            }
    
            [System.Runtime.CompilerServices.IndexerName("Items")]
            public string this[int index]
            {
                get { return m_dictionary[index]; }
                set { m_dictionary[index] = value; }
            }
            private Dictionary<int, string> m_dictionary = new Dictionary<int, string>();        
        }

    JS调用如下;

    function callCsharp2() {

    var data2 = $("#txtArg").attr("value"); //大坑 值不会时刻变化
    // alert(data2);
    var data = $("#txtArg").val(); 

    window.chrome.webview.hostObjects.webBrowserObj.ShowMessageArg(data);
    //window.chrome.webview.postMessage(data);
    };

    async function callCsharp3() {
       var data = $("#txtArg").val();
       var result = await webBrowserObj.GetData(data);
        alert(result);
    };
    
    async function callCsharp4() { 
    
                const propValue = await webBrowserObj.UserName;
                console.log(propValue);
                alert(propValue);
    };

     2、C#调用JS

            private void callJS_Click(object sender, RoutedEventArgs e)
            {
                webView.CoreWebView2.ExecuteScriptAsync("ShowMessage()");          
            }
    
            private void callJSArg_Click(object sender, RoutedEventArgs e)
            {
                webView.CoreWebView2.ExecuteScriptAsync($"ShowMessageArg('{txtArg.Text}')");
            }
    
            private async void callJSGetData_Click(object sender, RoutedEventArgs e)
            {
                var jsResult = await webView.CoreWebView2.ExecuteScriptAsync($"GetData('{txtArg.Text}')");
                if (!string.IsNullOrEmpty(jsResult))
                {
                    MessageBox.Show(jsResult);
                }            
            }

    js里面的代码

     //2、C#调用网页
            var jsVar = '123';
            function Hello() {
                alert('调用Js' + jsVar);
            };
    
            function ShowMessage() {
                alert('我是网页');
            };
            function ShowMessageArg(arg) {
                alert('【我是网页消息框】' + arg);
            };
            function GetData(arg) {
                return '【我是网页返回给你】:' + arg;
            };

    二、缩放问题

       webView.CoreWebView2.Settings.IsZoomControlEnabled = false;

       只能禁止鼠标缩放,不能禁止手势缩放。 见问题 

       另外触摸到底部门的时候 有弹跳,暂时也无法解决。

  • 相关阅读:
    内存队列使用Channels
    笔记20210101mongodb
    管道式的开发模式
    企业级应用架构设计
    再入历史旧坑
    路径问题 再次记录
    mongdb驱动的问题
    使用Bumblebee记录
    我和小兔子不得不说的消息v2
    流程设计器jQuery + svg/vml(Demo7
  • 原文地址:https://www.cnblogs.com/ColorsWin/p/14440412.html
Copyright © 2011-2022 走看看