したいこと
c#ですでに書いたコードをwebページ上で作動させたくて、html→javascript→c#の手順なら反映できると考えて進めていたのですが、javascriptとc#を連携させる方法がいまいちピンときません。どういったコードを組めば連携できるのか教えてください。できればソフトのインストールなどが必要ない手段がいいです。
試してこと
いろんな記事を漁ってみたところ、このページに辿り着きました。
Webview C#とJavascriptの連携
いってることが全然理解できないです。。。
Q1:この記事は正しい情報(htmlでc#を起動させる方法)を述べてますか?
Q2: どのレベルまで勉強したら理解できますか?
Q3: みなさんはこういった知識をどのように得ましたか?
ご回答よろしくおねがいいたします。
ソースコード(webページの)
c#
1using Microsoft.Web.WebView2.Core; 2using Microsoft.Web.WebView2.WinForms; 3using System; 4using System.Runtime.InteropServices; 5using System.Windows.Forms; 6 7namespace SampleWebView2Form 8{ 9 public partial class Form1 : Form 10 { 11 /// <summary>webviewのコントロール(わかりやすい様に、デザイナーを使わずにコード側で実装します。)</summary> 12 private WebView2 WebView = new WebView2 13 { 14 //個人の環境に合わせて下さい 15 Source = new Uri("file:///C:/Users/name/Desktop/sample.html"), 16 }; 17 18 /// <summary>JavaScriptで呼ぶ関数を保持するオブジェクト</summary> 19 private JsToCs CsClass = new JsToCs(); 20 21 public Form1() 22 { 23 this.Controls.Add(WebView); 24 InitializeComponent(); 25 26 //WebView2のサイズをフォームのサイズに合わせる 27 WebView.Size = this.Size; 28 this.SizeChanged += Form1_SizeChanged; 29 30 //WebView2のロード完了時のイベント 31 WebView.NavigationCompleted += WebView_NavigationCompleted; 32 } 33 34 /// <summary>WebView2のロード完了時</summary> 35 private void WebView_NavigationCompleted(object sender, CoreWebView2NavigationCompletedEventArgs e) 36 { 37 try 38 { 39 if (WebView.CoreWebView2 != null) 40 { 41 //JavaScriptからC#のメソッドが実行できる様に仕込む 42 WebView.CoreWebView2.AddHostObjectToScript("class", CsClass); 43 44 //JavaScriptの関数を実行 45 CsToJs(); 46 } 47 else MessageBox.Show("CoreWebView2==null"); 48 } 49 catch(Exception ex) 50 { 51 MessageBox.Show(ex.ToString()); 52 } 53 } 54 55 /// <summary>Jsのメソッドを実行</summary> 56 private async void CsToJs() 57 { 58 //WebView.ExecuteScriptAsync("func1()").ResultをするとWebView2がフリーズする 59 string str1 = await WebView.ExecuteScriptAsync("func1(\"C#からの呼び出し\")"); 60 MessageBox.Show("Jsからの戻り値>" + str1); 61 } 62 63 /// <summary>サイズ変更時のイベントでWebView2のサイズをフォームに合わせる</summary> 64 private void Form1_SizeChanged(object sender, EventArgs e) 65 { 66 WebView.Size = this.Size; 67 } 68 } 69 70 //↓属性設定が無いとエラーになります 71 /// <summary>WebView2に読み込ませるためのJsで実行する関数を保持させたクラス</summary> 72 [ClassInterface(ClassInterfaceType.AutoDual)] 73 [ComVisible(true)] 74 public class JsToCs 75 { 76 public void MessageShow(string strText) 77 { 78 MessageBox.Show("Jsからの呼び出し>" + strText); 79 } 80 } 81}
html
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta content="text/html;charset=utf-8" http-equiv="Content-Type" /> 5 <script language="javascript" type="text/javascript"> 6 //C#から呼び出すための関数 7 function func1(str1) { 8 alert("C# called>" + str1); 9 return "success" 10 } 11 function ButtonClick() { 12 //C#の関数の実行 13 chrome.webview.hostObjects.class.MessageShow("Js send text"); 14 } 15 </script> 16</head> 17<body> 18 <h1>sample</h1> 19 <input type="button" value='send Message' onclick="ButtonClick();"/> 20 <script></script> 21</body> 22</html>
回答1件
あなたの回答
tips
プレビュー