国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C# Winform 中使用 Webview2

這篇具有很好參考價(jià)值的文章主要介紹了C# Winform 中使用 Webview2。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言

目前的windows/Linux下的UI方案,以Qt為主,F(xiàn)lutter, Electron為輔,其他的各種UI都是不堪大用。眾所周知,Electron的資源占用和內(nèi)容占用太大,效率不行,所以有了后續(xù)各種跨語(yǔ)言的Web套殼方案:

  • walls go語(yǔ)言下web套殼
  • tarui Rust下的web套殼

除了使用CEF的Qt/C++/C#方案,Qt+WebEngine, 目前在Windows下各家的最終歸路都轉(zhuǎn)向Webview2方案,可以極大地減少發(fā)布的程序的大小。

備注:

  1. VS2019支持.Net Framework(~4.8), 對(duì)于Net Core 3 和Net 5 支持并不是很完善,并且已過(guò)了維護(hù)期
  2. VS2022對(duì)Net 6, 7以及Net Framework 4.8 的支持都很完善,建議使用此搭配

C# Winform下Webview2方案Demo

.Net Framework 使用4.8

UI Form核心Code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace webview
{
    public partial class Form1 : Form
    {
        private webTool tool;

        public Form1()
        {
            InitializeComponent();
            // https://blog.csdn.net/bashendixie5/article/details/126432821
            tool = new webTool(ref webView2_main);
            initWebview2();
        }

        private async void initWebview2()
        {
            var userData = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), Application.ProductName);
            var env = await Microsoft.Web.WebView2.Core.CoreWebView2Environment.CreateAsync(null, userData);
            await webView2_main.EnsureCoreWebView2Async(env);
            //webView2_main.CoreWebView2InitializationCompleted += WebView2_main_CoreWebView2InitializationCompleted;

            // title 發(fā)生變化時(shí)
            webView2_main.CoreWebView2.DocumentTitleChanged += CoreWebView2_DocumentTitleChanged;
            // 有新的網(wǎng)頁(yè)請(qǐng)求時(shí), 攔截
            webView2_main.CoreWebView2.NewWindowRequested += CoreWebView2_NewWindowRequested;

            // add binding with C#
            webView2_main.CoreWebView2.AddHostObjectToScript("tool", tool);
        }

        private void CoreWebView2_NewWindowRequested(object sender, Microsoft.Web.WebView2.Core.CoreWebView2NewWindowRequestedEventArgs e)
        {
            var defer = e.GetDeferral();
            e.Handled = true; 
            webView2_main.Source = new Uri(e.Uri);
            // 或者新開(kāi)一個(gè)windows
            //e.NewWindow = webView2_main.CoreWebView2;
            defer.Complete();
        }

        private void CoreWebView2_DocumentTitleChanged(object sender, object e)
        {
            Text = webView2_main.CoreWebView2.DocumentTitle;
        }

        private void button_go_Click(object sender, EventArgs e)
        {
            webView2_main.Source = new Uri(textBox_url.Text.Trim());
        }

        private void button_back_Click(object sender, EventArgs e)
        {
            if(webView2_main.CanGoBack) webView2_main.GoBack();
        }

        private void button_forward_Click(object sender, EventArgs e)
        {
            if (webView2_main.CanGoForward) webView2_main.GoForward();
        }

        private void button_test_Click(object sender, EventArgs e)
        {
            var a = new Dictionary<string, object>();
            a["123"] = "xxxyy";
            a["abc"] = 15.23;
            a["0"] = true;
            tool.callJs(a);
        }
    }
}

依賴的object必須實(shí)現(xiàn)COM接口:

using Microsoft.Web.WebView2.WinForms;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

// https://learn.microsoft.com/zh-tw/dotnet/api/microsoft.web.webview2.core.corewebview2.addhostobjecttoscript?view=webview2-dotnet-0.9.628-prerelease

namespace webview
{
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ComVisible(true)]
    public class webTool
    {
        private WebView2 web;

        public webTool(ref WebView2 web)
        {
            this.web = web;
        }
        public void msg(string txt)
        {
            MessageBox.Show(txt, "By Form", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
        public void callJs(object args)
        {
            string js = $"console.log({JsonConvert.SerializeObject(args)})";
            web.ExecuteScriptAsync(js);
        }
    }
}

html Demo參考:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JS with C# Demo</title>
</head>
<script>
    var tool = window.chrome.webview.hostObjects.tool;
    function call_C(){
    console.log(tool);
    tool.msg("hello, i am from web ui");
    alert("ok");
    }
</script>
<body>
    <button onclick="call_C()">Call C# Code with message</button>
    <pre>
    var tool = window.chrome.webview.hostObjects.tool;
    function call_C(){
        console.log(tool);
        tool.msg("hello, i am from web ui");
        alert("ok");
    }
</pre>
</body>


</html>

程序Setup打包

對(duì)于打包程序,使用Visual Studio Setup Installer Project創(chuàng)建,參考:

  • Unistall 提供
  • 手動(dòng)拖動(dòng)文件夾可以快速添加
  • 需要手動(dòng)判斷需要的文件
  • Program File一般無(wú)寫(xiě)權(quán)限,使用AppData/Local/xxx作為自己的程序數(shù)據(jù)目錄

參考文章:

  • https://www.pianshen.com/article/14091375659/
  • https://blog.csdn.net/jk_rou/article/details/130307402
  • https://betheme.net/yidongkaifa/72139.html?action=onClick

Webview2 控件找不到

如果遇到Webview2控件在Toolbox的工具箱中找不到,可以考慮下面2個(gè)方案:

  1. 檢查webview2的版本依賴,一般有對(duì)應(yīng)Edge版本要求,所以,升級(jí)Edge就好了
  2. 當(dāng)前Webview2安裝包沒(méi)有你使用的net framework/net core版本,但是實(shí)際上還是可以用的,參照如下方法,手動(dòng)添加到工具箱就可以啦。
**Solution**

I found the solution for adding the WebView2 control to the toolbox on the GitHub site you provided, post is [here](https://github.com/MicrosoftEdge/WebViewFeedback/issues/323). Here are the details of the solution for others to follow:

- Right-click on the toolbar in Visual Studios
- Select 'Choose Items...'
- Click the '.NET Framework Components' tab
- Click 'Browse', may have to wait for scan to finish
- Navigate to '<your-solution-folder>\\packages\\Microsoft.Web.WebView2.0.9.538-prerelease\\lib\\net462'
- Select the correct DLL for your application type
- Once the file is selected click the 'OK' button in the window

Done! Now you can access the WebView2 control in the toolbox. If you're using .Net Core then try replacing 'net462' with 'netcoreapp3.0' in the folder path.

注意:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-522409.html

  1. Webview2目前并不是支持所有的net framework!!!
  2. 如果遇上Webview2安裝完成后在ToolBox不顯示問(wèn)題,需要檢查Edge瀏覽器版本。還要核對(duì)你使用的net framework版本。參考這里:https://www.nuget.org/packages/Microsoft.Web.WebView2#supportedframeworks-body-tab。
  3. 如果你用net 4.8 可以考慮手動(dòng)添加net 4.5的dll使用,木有問(wèn)題。但是net core 6/7 使用 3的dll肯定是不行的

到了這里,關(guān)于C# Winform 中使用 Webview2的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 一.Winform使用Webview2(Edge瀏覽器核心) 創(chuàng)建demo(Demo1)實(shí)現(xiàn)回車(chē)導(dǎo)航到指定地址

    一.Winform使用Webview2(Edge瀏覽器核心) 創(chuàng)建demo(Demo1)實(shí)現(xiàn)回車(chē)導(dǎo)航到指定地址

    往期相關(guān)文章目錄 專(zhuān)欄目錄 WinForms 應(yīng)用中的 WebView2 入門(mén) 按照官方文檔一路操作,可以自行百度或者查看WinForms 應(yīng)用中的 WebView2 入門(mén)。為了避坑,本人安裝的時(shí)vs2022(visual studio 以下簡(jiǎn)稱vs) 打開(kāi)vs(visual studio 以下簡(jiǎn)稱vs) 點(diǎn)擊 創(chuàng)建新項(xiàng)目 ,選擇 C# Windows 窗體應(yīng)用 (.NET Framework

    2024年02月21日
    瀏覽(27)
  • c#使用webView2 訪問(wèn)本地靜態(tài)html資源跨域Cors問(wèn)題

    c#使用webView2 訪問(wèn)本地靜態(tài)html資源跨域Cors問(wèn)題

    在瀏覽器中訪問(wèn)本地靜態(tài)資源html網(wǎng)頁(yè)時(shí),可能會(huì)遇到跨域問(wèn)題如圖。 ? 是因?yàn)闉g覽器默認(rèn)啟用了同源策略,即只允許加載與當(dāng)前網(wǎng)頁(yè)具有相同源(協(xié)議、域名和端口)的內(nèi)容。 WebView2默認(rèn)情況下啟用了瀏覽器的同源策略,即只允許加載與主機(jī)相同源的內(nèi)容。所以如果我們把

    2024年02月20日
    瀏覽(28)
  • net中winform教程 瀏覽器控件,還是微軟的WebView2最好用

    如果想在Winform項(xiàng)目中使用瀏覽器控件,可能想到的第一個(gè)控件就是微軟自帶的WebBrowser,可這個(gè)不爭(zhēng)氣的家伙,從出現(xiàn)到現(xiàn)在,沒(méi)有一丁點(diǎn)的升級(jí),即使身為Net程序員,也不得不對(duì)它豎起了中指。不過(guò),好在微軟迷途知返,提供了升級(jí)控件,才算擺平。不然讓Google的Cef控件搶

    2024年02月11日
    瀏覽(30)
  • WPF混合開(kāi)發(fā)之WebView2(二) WebView2的簡(jiǎn)單使用

    WPF混合開(kāi)發(fā)之WebView2(二) WebView2的簡(jiǎn)單使用

    在上一篇文章中,我們介紹了WebView2的環(huán)境搭建,點(diǎn)此前往,在這一章節(jié),我們將使用WebView2簡(jiǎn)單搭建一個(gè)WPF程序,在程序中加載百度搜索頁(yè)面,廢話不多說(shuō),直接上流程。 建立WPF工程 建立WPF工程步驟很簡(jiǎn)單,在此不再截圖,直接上步驟: 打開(kāi)Visual Stido 2022(博主使用的是vs

    2024年02月05日
    瀏覽(22)
  • c#使用webView2 訪問(wèn)本地靜態(tài)html資源跨域Cors問(wèn)題 (附帶代理服務(wù)helper幫助類(lèi))

    c#使用webView2 訪問(wèn)本地靜態(tài)html資源跨域Cors問(wèn)題 (附帶代理服務(wù)helper幫助類(lèi))

    在瀏覽器中訪問(wèn)本地靜態(tài)資源html網(wǎng)頁(yè)時(shí),可能會(huì)遇到跨域問(wèn)題如圖。 ? 是因?yàn)闉g覽器默認(rèn)啟用了同源策略,即只允許加載與當(dāng)前網(wǎng)頁(yè)具有相同源(協(xié)議、域名和端口)的內(nèi)容。 WebView2默認(rèn)情況下啟用了瀏覽器的同源策略,即只允許加載與主機(jī)相同源的內(nèi)容。所以如果我們把

    2024年02月21日
    瀏覽(26)
  • WPF中使用WebView2控件

    WPF中使用WebView2控件

    WebView2 全稱 Microsoft Edge WebView2 控件,此控件的作用是在本機(jī)桌面應(yīng)用中嵌入web技術(shù)(html,css,javascript),從名字就可以看出來(lái)WebView2使用了Edge內(nèi)核渲染web內(nèi)容。 通俗來(lái)說(shuō),WebView2控件是一個(gè)UI組件,允許在桌面應(yīng)用中提供web能力的集成,即俗稱的混合開(kāi)發(fā)。 助力程序開(kāi)發(fā)和

    2024年02月03日
    瀏覽(63)
  • 【小沐學(xué)C#】WPF中嵌入web網(wǎng)頁(yè)控件(WebBrowser、WebView2、CefSharp)

    【小沐學(xué)C#】WPF中嵌入web網(wǎng)頁(yè)控件(WebBrowser、WebView2、CefSharp)

    使用 Windows Presentation Foundation (WPF),你可以創(chuàng)建適用于 Windows 且具有非凡視覺(jué)效果的桌面客戶端應(yīng)用程序。 WPF 的核心是一個(gè)與分辨率無(wú)關(guān)且基于矢量的呈現(xiàn)引擎,旨在充分利用現(xiàn)代圖形硬件。 WPF 通過(guò)一套完善的應(yīng)用程序開(kāi)發(fā)功能對(duì)該核心進(jìn)行了擴(kuò)展,這些功能包括可擴(kuò)展應(yīng)

    2024年02月03日
    瀏覽(34)
  • C++ 在Win32中簡(jiǎn)單使用WebView2

    C++ 在Win32中簡(jiǎn)單使用WebView2

    Microsoft Edge WebView2 控件允許在本機(jī)應(yīng)用中嵌入 web 技術(shù)(HTML、CSS 以及 JavaScript)。 WebView2 控件使用 Microsoft Edge 作為繪制引擎,以在本機(jī)應(yīng)用中顯示 web 內(nèi)容。 使用 WebView2 可以在本機(jī)應(yīng)用的不同部分嵌入 Web 代碼,或在單個(gè) WebView2 實(shí)例中生成所有本機(jī)應(yīng)用。可以去官網(wǎng)查看具體

    2024年02月06日
    瀏覽(23)
  • WebView2 的初步集成與試用

    WebView2 的初步集成與試用

    目錄 一、環(huán)境概況 二、安裝 三、集成測(cè)試 ?參考資料 ? ? ? ? 由于以前公司自己集成了一個(gè)瀏覽器供客戶使用,而原來(lái)的瀏覽器使用的是IWebBrowser2的技術(shù),而IWebBrowser2技術(shù)支持的IE框架只能到ie11,但由于現(xiàn)在新的js框架橫行,而且加上windows放棄了IE瀏覽器,而有的客戶項(xiàng)目

    2024年02月05日
    瀏覽(24)
  • QT5 通過(guò) webview2 加載網(wǎng)頁(yè)

    QT5 通過(guò) webview2 加載網(wǎng)頁(yè)

    官方文檔參考:https://learn.microsoft.com/zh-cn/microsoft-edge/webview2/get-started/win32 頭文件主要為:WebView2和WixLibrary,存儲(chǔ)在include/external 庫(kù)主要為:WebView2LoaderStatic.lib和WebView2Loader.dll,存儲(chǔ)在lib/external CMakeLists文件 base/set_env.cmake init_project.cmake base/set_compile_arg.cmake main函數(shù) MainWindow函數(shù)

    2024年02月07日
    瀏覽(28)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包