C# 使用Microsoft Edge WebView2的相关总结

作者:ColorsWin 时间:2023-02-09 16:51:12 

一、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;

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

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

来源:https://www.cnblogs.com/ColorsWin/p/14440412.html

标签:c#,Microsoft,Edge,WebView2
0
投稿

猜你喜欢

  • SpringBoot 配置文件加密的步骤

    2023-10-23 02:55:55
  • 深入浅析SpringBoot中的自动装配

    2021-08-21 17:45:11
  • c#实现简单控制台udp异步通信程序示例

    2022-06-13 18:54:38
  • C#图表算法之无向图

    2021-08-08 22:50:20
  • Spring自动装配之方法、构造器位置的自动注入操作

    2021-11-30 23:28:40
  • Android支付宝支付设计开发

    2022-11-19 18:05:25
  • android 照相功能的简单实例

    2023-08-08 01:11:55
  • SpringBoot自定义注解之实现AOP切面日志详解

    2022-12-18 17:58:06
  • 重新认识Java的System.in

    2023-08-24 01:55:18
  • Android如何防止apk程序被反编译(尊重劳动成果)

    2022-02-08 02:18:04
  • 详解Android中Service AIDL的使用

    2022-10-02 05:08:16
  • MyBatis入门学习教程-MyBatis快速入门

    2023-10-25 05:06:07
  • 基于Java实现Actor模型

    2021-12-11 09:28:50
  • 详解tryAcquire()、addWaiter()、acquireQueued()

    2022-07-30 10:24:05
  • spring data JPA 中的多属性排序方式

    2023-01-14 19:26:41
  • C#中事件只能在内部调用的原因分析

    2023-08-09 05:07:00
  • 解析SpringBoot中使用LoadTimeWeaving技术实现AOP功能

    2023-04-19 00:21:47
  • 通过C++程序示例理解设计模式中的外观模式

    2022-02-06 19:38:15
  • java识别一篇文章中某单词出现个数的方法

    2022-04-24 06:18:40
  • C#使用iTextSharp将PDF转成文本的方法

    2022-05-03 16:59:48
  • asp之家 软件编程 m.aspxhome.com