JavaScript
C#
qnoteDay 21

C#でWebBrowserを使用し、JavaScriptとデータをやり取りする

More than 1 year has passed since last update.

C#のWebBrowserコントロールを使用した場合、ハードウェア制御の処理はC#で行い結果表示はjsで表示したいことがあります。

WebBrowser.InvokeScriptメソッドを使用することでC#とjsとでデータのやり取りを行うことができます。


sample.cs

public partial class Form1 : Form

{

public Form1()
{
InitializeComponent();

webBrowser1.ObjectForScripting = new TestClasss();
MainForm_Load();

}

private void MainForm_Load()
{

var indexPath = "http://127.0.0.1:80/sample.html";
System.Text.Encoding encoding = System.Text.Encoding.UTF8;
webBrowser1.Navigate(indexPath);

}

[ComVisible(true)]
public class TestClasss
{
public void TestFunc(string str)
{
MessageBox.Show(str, "戻り値", MessageBoxButtons.OK);
}
}

private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Document.InvokeScript("sample", new string[] { "あいうえお", "さしすせそ" });
}
}



forward.html

<html>

<head>
<meta charset="utf-8">
<title>タイトル</title>
</head>
<body>
<script>
function sample(arg1, arg2) {
window.external.TestFunc(arg1 + ",かきくけこ," + arg2);
}
</script>
</body>
</html>

C#のボタンを押すとjsのsample関数が実行されます。その際objectで引数を渡しています

webBrowser1.Document.InvokeScript("sample", new string[] { "あいうえお", "さしすせそ" });

jsのsampleは受け取った値(「あいうえお」と「さしすせそ」)の文字列をに「かきくけこ」を追加し、C#側のTestFuncを呼び出します。

window.external.TestFunc(arg1 + ",かきくけこ," + arg2);

これでC#とjsとでデータの受け渡しが完了です。