回答編集履歴

1

追記

2019/03/17 07:07

投稿

Zuishin
Zuishin

スコア28660

test CHANGED
@@ -1,3 +1,167 @@
1
1
  その前に両者のコードが同じものじゃないんですが。
2
2
 
3
3
  window あたりが怪しくありませんか?
4
+
5
+
6
+
7
+ # 追記
8
+
9
+
10
+
11
+ 結論から言えば、メッセージループが必要だったので、コンソールアプリでも Form を作る必要がありました。
12
+
13
+ 以下がコンソールアプリでのサンプルコードです。
14
+
15
+ [WebBrowser.ObjectForScripting Property](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.webbrowser.objectforscripting?view=netframework-4.7.2#System_Windows_Forms_WebBrowser_ObjectForScripting) を参考にしました。
16
+
17
+
18
+
19
+ ```C#
20
+
21
+ using System;
22
+
23
+ using System.Drawing;
24
+
25
+ using System.Drawing.Drawing2D;
26
+
27
+ using System.Runtime.InteropServices;
28
+
29
+ using System.Security.Permissions;
30
+
31
+ using System.Windows.Forms;
32
+
33
+
34
+
35
+ namespace ConsoleApp1
36
+
37
+ {
38
+
39
+ class Program
40
+
41
+ {
42
+
43
+ [STAThread]
44
+
45
+ static void Main(string[] args)
46
+
47
+ {
48
+
49
+ var result = ParserForm.Parse("Hello World");
50
+
51
+ Console.WriteLine(result ?? "(null)");
52
+
53
+ Console.ReadKey();
54
+
55
+ }
56
+
57
+ }
58
+
59
+
60
+
61
+ [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
62
+
63
+ [ComVisibleAttribute(true)]
64
+
65
+ public class ParserForm : Form
66
+
67
+ {
68
+
69
+ public static string Parse(string message)
70
+
71
+ {
72
+
73
+ var region = new Region(new GraphicsPath());
74
+
75
+ var form = new ParserForm
76
+
77
+ {
78
+
79
+ Visible = false,
80
+
81
+ message = message,
82
+
83
+ FormBorderStyle = FormBorderStyle.None,
84
+
85
+ Region = region
86
+
87
+ };
88
+
89
+ form.ShowDialog();
90
+
91
+ return form.Result?.ToString();
92
+
93
+ }
94
+
95
+
96
+
97
+ private WebBrowser webBrowser1 = new WebBrowser();
98
+
99
+ private string message;
100
+
101
+ public object Result { get; set; }
102
+
103
+
104
+
105
+ public ParserForm()
106
+
107
+ {
108
+
109
+ webBrowser1.Dock = DockStyle.Fill;
110
+
111
+ Controls.Add(webBrowser1);
112
+
113
+ Load += (s, e) =>
114
+
115
+ {
116
+
117
+ webBrowser1.ObjectForScripting = this;
118
+
119
+ webBrowser1.DocumentText = @"
120
+
121
+ <html>
122
+
123
+ <head>
124
+
125
+ <meta charset=""utf-8"" />
126
+
127
+ <meta http-equiv=""X-UA-Compatible"" content=""IE=11"" />
128
+
129
+ <title>title</title>
130
+
131
+ </head>
132
+
133
+ <body>
134
+
135
+ <script>
136
+
137
+ function cs_func(text) {
138
+
139
+ window.external.Result = text;
140
+
141
+ }
142
+
143
+ </script>
144
+
145
+ <h1>Hello!</h1>
146
+
147
+ </body>
148
+
149
+ </html>
150
+
151
+ ";
152
+
153
+ Application.DoEvents();
154
+
155
+ webBrowser1.Document.InvokeScript("cs_func", new[] { message });
156
+
157
+ DialogResult = DialogResult.OK;
158
+
159
+ };
160
+
161
+ }
162
+
163
+ }
164
+
165
+ }
166
+
167
+ ```