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;

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

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

(0)

相关推荐