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

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

這篇具有很好參考價(jià)值的文章主要介紹了c#使用webView2 訪問本地靜態(tài)html資源跨域Cors問題。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

背景

在瀏覽器中訪問本地靜態(tài)資源html網(wǎng)頁(yè)時(shí),可能會(huì)遇到跨域問題如圖。

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

?

是因?yàn)闉g覽器默認(rèn)啟用了同源策略,即只允許加載與當(dāng)前網(wǎng)頁(yè)具有相同源(協(xié)議、域名和端口)的內(nèi)容。

WebView2默認(rèn)情況下啟用了瀏覽器的同源策略,即只允許加載與主機(jī)相同源的內(nèi)容。所以如果我們把靜態(tài)資源發(fā)布到iis或者通過node進(jìn)行啟動(dòng)就可以看到不跨域了。

解決方案

  1. 使用CORS(Cross-Origin Resource Sharing):如果你有控制服務(wù)器端,可以在服務(wù)器端配置CORS來允許跨域請(qǐng)求。在服務(wù)器端的響應(yīng)頭中添加相關(guān)的CORS頭部信息,例如允許訪問的域名、請(qǐng)求方法等,以允許JavaScript跨域訪問。

  2. 使用WebView2的 AddWebResourceRequestedFilter 方法:通過添加Web資源請(qǐng)求過濾器,你可以攔截WebView2控件中加載的資源請(qǐng)求,并進(jìn)行處理。在攔截到JavaScript文件請(qǐng)求時(shí),修改響應(yīng)頭部信息,添加Access-Control-Allow-Origin頭部來解決跨域問題。
  3. 使用代理服務(wù)器:你可以在本地啟動(dòng)一個(gè)代理服務(wù)器,將WebView2控件的請(qǐng)求轉(zhuǎn)發(fā)到代理服務(wù)器上,然后代理服務(wù)器再將請(qǐng)求發(fā)送到原始服務(wù)器并返回響應(yīng)。在代理服務(wù)器上你可以設(shè)置合適的CORS頭部信息來解決跨域問題。

思路

  1. 首先,確保你已經(jīng)安裝了Microsoft.Web.WebView2。你可以在Visual Studio的NuGet包管理器中搜索并安裝此包。

  2. 然后通過HttpListener進(jìn)行文件夾的靜態(tài)資源進(jìn)行代理發(fā)布
  3. 然后通過webview2進(jìn)行導(dǎo)航訪問即可我們會(huì)發(fā)現(xiàn)跨域問題已經(jīng)解決

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

    ?

代碼

?

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

namespace WinApp.View
{
    public partial class Cors : Form
    {
        // 創(chuàng)建HttpListener對(duì)象并指定綁定的端口
        HttpListener _listener;
        string _folderPath;
        string _rootDirectory;

        public Cors()
        {
            InitializeComponent();

            // 初始化
            InitializeAsync();
        }

        private async void InitializeAsync()
        {
            // 獲取本地靜態(tài)資源的路徑             
            _rootDirectory = AppDomain.CurrentDomain.BaseDirectory + "offline-exam-player"; //設(shè)置本地離線播放器為代理服務(wù)
            _rootDirectory = @"C:\Users\admin\Documents\WeChat Files\wxid_1ofgk575ybpt22\FileStorage\File\2024-02\ng-alain8\ng-alain8/";
            _folderPath = @"C:\Users\admin\Documents\WeChat Files\wxid_1ofgk575ybpt22\FileStorage\File\2024-02\ng-alain8\ng-alain8/index.html";

            _listener = new HttpListener();
            // 設(shè)置代理服務(wù)器的監(jiān)聽地址和端口號(hào)
            _listener.Prefixes.Add("http://localhost:8080/");
            _listener.Start();

            // 啟動(dòng)代理服務(wù)器
            Task.Run(() =>
            {
                // 啟動(dòng)代理服務(wù)器
                ProcessRequests();
            });

            // 停止代理服務(wù)器(這里演示就不停止了)
            //server.Stop();
        }

        private void ProcessRequests()
        {
            try
            {
                while (_listener.IsListening)
                {
                    HttpListenerContext context = _listener.GetContext();
                    string requestPath = context.Request.Url.AbsolutePath;
                    string filePath = _rootDirectory + requestPath;

                    // Serve the requested file if it exists
                    if (System.IO.File.Exists(filePath))
                    {
                        string extension = System.IO.Path.GetExtension(filePath);
                        string contentType;
                        switch (extension)
                        {
                            case ".html":
                                contentType = "text/html";
                                break;
                            case ".js":
                                contentType = "application/javascript";
                                break;
                            case ".less":
                            case ".css":
                                contentType = "text/css";
                                break;
                            case ".svg":
                                contentType = "image/svg+xml";
                                break;
                            default:
                                contentType = "application/octet-stream";
                                break;
                        }

                        context.Response.ContentType = contentType;
                        //context.Response.ContentType = "text/html";
                        byte[] responseBuffer = System.IO.File.ReadAllBytes(filePath);
                        context.Response.OutputStream.Write(responseBuffer, 0, responseBuffer.Length);
                        context.Response.Close();
                    }
                    else
                    {
                        // Return a 404 response if the file does not exist
                        context.Response.StatusCode = 404;
                        context.Response.Close();
                    }
                }
            }
            catch (Exception ex)
            {
                // Handle any exceptions that may occur
                Console.WriteLine(ex.ToString());
            }
        }


        private async void Cors_Load(object sender, EventArgs e)
        {
            //本地靜態(tài)資源,直接訪問會(huì)出現(xiàn)跨院,如果通過iis訪問則不會(huì)跨域;

            // 確保CoreWebView2運(yùn)行時(shí)已準(zhǔn)備就緒
            await webView21.EnsureCoreWebView2Async();

            // 在WebView2控件中加載URL
            //webView21.CoreWebView2.Navigate(_folderPath);            
            webView21.CoreWebView2.Navigate("http://localhost:8080/" + "index.html");
        }

    }
}

?

結(jié)語(yǔ)

最后如果對(duì)于不多的跨域js文件,可以把js的代碼內(nèi)嵌到index.html頁(yè)面實(shí)現(xiàn)。就是<script>跨域js內(nèi)容</script>文章來源地址http://www.zghlxwxcb.cn/news/detail-830549.html

到了這里,關(guān)于c#使用webView2 訪問本地靜態(tài)html資源跨域Cors問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(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)文章

  • SpringBoot代理訪問本地靜態(tài)資源400 404

    SpringBoot代理訪問本地靜態(tài)資源400 404

    問題:訪問過程中可能會(huì)出現(xiàn)400、404問題 前提:保證有文件,并且文件路徑正確 SpringBoot如何配置靜態(tài)資源代理,大家可以網(wǎng)上找一找,或者也可以參考我的另一篇博客 SpringBoot addResourceHandlers 代理靜態(tài)資源 1、路徑純英文 此種情況目前沒有遇到過問題 2、路徑包含中文 此種

    2024年02月12日
    瀏覽(23)
  • 【小沐學(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 且具有非凡視覺效果的桌面客戶端應(yīng)用程序。 WPF 的核心是一個(gè)與分辨率無關(guān)且基于矢量的呈現(xiàn)引擎,旨在充分利用現(xiàn)代圖形硬件。 WPF 通過一套完善的應(yīng)用程序開發(fā)功能對(duì)該核心進(jìn)行了擴(kuò)展,這些功能包括可擴(kuò)展應(yīng)

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

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

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

    2024年02月05日
    瀏覽(22)
  • 【仿寫tomcat】五、響應(yīng)靜態(tài)資源(訪問html頁(yè)面)、路由支持以及多線程改進(jìn)

    【仿寫tomcat】五、響應(yīng)靜態(tài)資源(訪問html頁(yè)面)、路由支持以及多線程改進(jìn)

    如果我們想訪問html頁(yè)面其實(shí)就是將本地的html文件以流的方式響應(yīng)給前端即可,下面我們對(duì)HttpResponseServlet這個(gè)類做一些改造 writeHtml這個(gè)方法將會(huì)讀取webApp下面的html文件,注意只讀取下面一級(jí)文件中的html文件,然后將這個(gè)文件以二進(jìn)制流的形式轉(zhuǎn)換成字符串拼接到上面定義的

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

    WPF中使用WebView2控件

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

    2024年02月03日
    瀏覽(63)
  • express靜態(tài)資源訪問錯(cuò)誤 xxx.js was blocked due to MIME type (“text/html“)

    歸根結(jié)底原因是沒有靜態(tài)資源xxx.js的訪問權(quán)限 如何在express中給靜態(tài)資源添加訪問權(quán)限,我在express js中添加以下語(yǔ)句解決了該問題: 此時(shí)訪問public文件夾中的xxx.js文件時(shí),只需要使用路徑 http://127.0.0.1/xxx.js 即可訪問,路徑中不需要帶public ---------------------------------------------

    2024年02月22日
    瀏覽(20)
  • 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(wǎng)查看具體

    2024年02月06日
    瀏覽(23)
  • 記錄使用nginx部署靜態(tài)資源流程,以及遇到的訪問靜態(tài)資源404問題

    記錄使用nginx部署靜態(tài)資源流程,以及遇到的訪問靜態(tài)資源404問題

    將網(wǎng)站靜態(tài)資源(HTML,JavaScript,CSS,img等文件)與后臺(tái)應(yīng)用分開部署實(shí)現(xiàn) 動(dòng)靜分離 ,提高用戶訪問靜態(tài)代碼的速度,降低對(duì)后臺(tái)應(yīng)用訪問,減輕后臺(tái)服務(wù)器的壓力。 這里我選擇放在了 html文件夾 下,(也可以放在和html文件夾同級(jí),或其它位置 打開 conf文件夾 打開總配置文

    2024年02月08日
    瀏覽(26)
  • c# 通過webView2模擬登陸小紅書網(wǎng)頁(yè)版,解析無水印視頻圖片,以及解決X-s,X-t簽名驗(yàn)證【2023年4月29日】

    c# 通過webView2模擬登陸小紅書網(wǎng)頁(yè)版,解析無水印視頻圖片,以及解決X-s,X-t簽名驗(yàn)證【2023年4月29日】

    一、c# WebView2簡(jiǎn)介 ? 1.一開始使用WebBrowser,因?yàn)閃ebBrowser控件使用的是ie內(nèi)核,經(jīng)過修改注冊(cè)表切換為Edge內(nèi)核后, 發(fā)現(xiàn)Edge內(nèi)核版本較低,加載一些視頻網(wǎng)站提示“瀏覽器版本過低“,”視頻無法加載“。 2.WebBrowser內(nèi)核版本與WebView2比較 WebBrowser內(nèi)核版本: 內(nèi)核版本 (Version) E

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

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

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

    2024年02月21日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包