• 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;

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

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

  • 相关阅读:
    net core 使用 rabbitmq
    asp.net core WebApi 返回 HttpResponseMessage
    asp.net core 2.1 WebApi 快速入门
    JQuery EasyUI combobox动态添加option
    php截取字符去掉最后一个字符
    JQuery EasyUI Combobox的onChange事件
    对于不返回任何键列信息的 selectcommand 不支持 updatecommand 的动态 sql 生成
    Access2007 操作或事件已被禁用模式阻止解决办法
    Easyui 中 Tabsr的常用方法
    Win 7 IE11不能下载文件,右键另存为也不行
  • 原文地址:https://www.cnblogs.com/ColorsWin/p/14440412.html
Copyright © 2020-2023  润新知