質問編集履歴
7
title
CHANGED
File without changes
|
body
CHANGED
@@ -6,6 +6,9 @@
|
|
6
6
|
Windowsアプリケーションと同じ動作をさせるためには、何が必要ですか。
|
7
7
|
どこに問題がありますか。
|
8
8
|
|
9
|
+
**追記**
|
10
|
+
私が最終的にしたいことは**Web BrowserでJava Scriptを処理させ、C#で結果を受け取ること**です。フォームを表示せずにWeb Browserを通じてJava Scriptとやりとりをしたいのです。
|
11
|
+
|
9
12
|
### 発生している問題・エラーメッセージ
|
10
13
|
|
11
14
|
Windowsアプリケーションでは`Hello, world!`と表示されるが、
|
6
title
CHANGED
File without changes
|
body
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
コンソールアプリケーションでは`null`になる。
|
13
13
|
|
14
14
|
**追記**
|
15
|
-
|
15
|
+
Zuishinさんの指摘により、ソースコードが比較できるように変更したところ、
|
16
16
|
Windowsアプリケーションでも動作が怪しくなったため、
|
17
17
|
Windowsアプリケーションでも、コンソールアプリケーションでも動作がうまくいかない問題に直面しています。
|
18
18
|
(詳しくは追記を見てください。)
|
@@ -151,7 +151,7 @@
|
|
151
151
|
|
152
152
|
### 追記
|
153
153
|
|
154
|
-
|
154
|
+
Zuishinさんの指摘により、ソースコードを同じにしてみようとしてみました。
|
155
155
|
|
156
156
|
まずコンソールアプリケーションの場合です。
|
157
157
|
コンソールアプリケーションのときは参照から「System.Windows.Forms」を追加しなければなりません。
|
5
title
CHANGED
File without changes
|
body
CHANGED
@@ -149,18 +149,6 @@
|
|
149
149
|
|
150
150
|
~~`(null)`と表示されます。~~
|
151
151
|
|
152
|
-
### 試したこと
|
153
|
-
|
154
|
-
本当はもっと複雑だったのですが、
|
155
|
-
問題を探るため、上のように単純化したところ、
|
156
|
-
そもそも、関数`cs_func`が文字列`"Hello, world!"`を返していないことが分かりました。
|
157
|
-
それか、関数`cs_func`が呼び出される前に例外が発生して実行されていないかもしれません。
|
158
|
-
とにかく、原因が分かりません。
|
159
|
-
原因が分からないため、対処のしようがありません。
|
160
|
-
どうしたらいいのでしょうか。
|
161
|
-
|
162
|
-
`<meta http-equiv=""X-UA-Compatible"" content=""IE=11"" />`を消してみても状況は変わらないので関係ないと思います。(Window アプリケーションは問題なく動くし、コンソールアプリケーションは動かない)
|
163
|
-
|
164
152
|
### 追記
|
165
153
|
|
166
154
|
y_waiwaiさんの指摘により、ソースコードを同じにしてみようとしてみました。
|
4
問題の変更
title
CHANGED
File without changes
|
body
CHANGED
@@ -11,6 +11,14 @@
|
|
11
11
|
Windowsアプリケーションでは`Hello, world!`と表示されるが、
|
12
12
|
コンソールアプリケーションでは`null`になる。
|
13
13
|
|
14
|
+
**追記**
|
15
|
+
y_waiwaiさんの指摘により、ソースコードが比較できるように変更したところ、
|
16
|
+
Windowsアプリケーションでも動作が怪しくなったため、
|
17
|
+
Windowsアプリケーションでも、コンソールアプリケーションでも動作がうまくいかない問題に直面しています。
|
18
|
+
(詳しくは追記を見てください。)
|
19
|
+
|
20
|
+
私のソースコードはどのような動作をしているのでしょうか。
|
21
|
+
|
14
22
|
### 該当のソースコード
|
15
23
|
|
16
24
|
追記の方を見てください。
|
@@ -351,8 +359,6 @@
|
|
351
359
|
おそらく、Java Scriptの方には問題がない(上記に示すように不安定だが動くときは動くので)とは思うのですが、
|
352
360
|
原因と対処法を教えていただきたいです。
|
353
361
|
|
354
|
-
|
355
|
-
|
356
362
|
### 補足情報
|
357
363
|
|
358
364
|
ターゲットフレームワーク: `.NET Framework 4.7.1`
|
3
ソースコードを比較できるように改善
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
|
3
|
-
C#で外部から読み込んだJava Scriptで処理をしようとしたのですが、
|
3
|
+
[C#で外部から読み込んだJava Scriptで処理をしよう](https://qiita.com/Geochelone/items/996c371f9168e525e9c2)としたのですが、
|
4
4
|
Windowsアプリケーションでは動くものが、コンソールアプリケーションでは動きません。
|
5
5
|
|
6
6
|
Windowsアプリケーションと同じ動作をさせるためには、何が必要ですか。
|
@@ -13,8 +13,10 @@
|
|
13
13
|
|
14
14
|
### 該当のソースコード
|
15
15
|
|
16
|
-
|
16
|
+
追記の方を見てください。
|
17
17
|
|
18
|
+
~~Windows アプリケーションの場合~~
|
19
|
+
|
18
20
|
```csharp
|
19
21
|
using System;
|
20
22
|
using System.Runtime.InteropServices;
|
@@ -73,9 +75,9 @@
|
|
73
75
|
}
|
74
76
|
```
|
75
77
|
|
76
|
-
Button1を押すと、`button1_click`が呼び出され、コンソールに`Hello, world!`と表示されます。
|
78
|
+
~~Button1を押すと、`button1_click`が呼び出され、コンソールに`Hello, world!`と表示されます。~~
|
77
79
|
|
78
|
-
コンソールアプリケーションの場合
|
80
|
+
~~コンソールアプリケーションの場合~~
|
79
81
|
|
80
82
|
```csharp
|
81
83
|
using System;
|
@@ -137,7 +139,7 @@
|
|
137
139
|
}
|
138
140
|
```
|
139
141
|
|
140
|
-
`(null)`と表示されます。
|
142
|
+
~~`(null)`と表示されます。~~
|
141
143
|
|
142
144
|
### 試したこと
|
143
145
|
|
@@ -151,6 +153,206 @@
|
|
151
153
|
|
152
154
|
`<meta http-equiv=""X-UA-Compatible"" content=""IE=11"" />`を消してみても状況は変わらないので関係ないと思います。(Window アプリケーションは問題なく動くし、コンソールアプリケーションは動かない)
|
153
155
|
|
156
|
+
### 追記
|
157
|
+
|
158
|
+
y_waiwaiさんの指摘により、ソースコードを同じにしてみようとしてみました。
|
159
|
+
|
160
|
+
まずコンソールアプリケーションの場合です。
|
161
|
+
コンソールアプリケーションのときは参照から「System.Windows.Forms」を追加しなければなりません。
|
162
|
+
|
163
|
+
```csharp
|
164
|
+
using System;
|
165
|
+
using System.Runtime.InteropServices;
|
166
|
+
using System.Windows.Forms;
|
167
|
+
|
168
|
+
namespace ConsoleApp1
|
169
|
+
{
|
170
|
+
class Program
|
171
|
+
{
|
172
|
+
[STAThread]
|
173
|
+
static void Main(string[] args)
|
174
|
+
{
|
175
|
+
var parser = new MyClass();
|
176
|
+
var result = parser.Parse();
|
177
|
+
Console.WriteLine(result ?? "(null)");
|
178
|
+
}
|
179
|
+
}
|
180
|
+
|
181
|
+
public class MyClass
|
182
|
+
{
|
183
|
+
public string Text { get; set; }
|
184
|
+
public object Result { get; private set; }
|
185
|
+
public WebBrowser WebBrowser { get; } = new WebBrowser();
|
186
|
+
public ParseResult ParseResultObject { get; set; } = new ParseResult();
|
187
|
+
public string Parse()
|
188
|
+
{
|
189
|
+
WebBrowser.DocumentText = @"
|
190
|
+
<html>
|
191
|
+
<head>
|
192
|
+
<meta charset=""utf-8"" />
|
193
|
+
<meta http-equiv=""X-UA-Compatible"" content=""IE=11"" />
|
194
|
+
<title>title</title>
|
195
|
+
</head>
|
196
|
+
<body>
|
197
|
+
<script>
|
198
|
+
function cs_func(text) {
|
199
|
+
external.Result = text;
|
200
|
+
}
|
201
|
+
</script>
|
202
|
+
<h1>Hello!</h1>
|
203
|
+
</body>
|
204
|
+
</html>
|
205
|
+
";
|
206
|
+
WebBrowser.ObjectForScripting = ParseResultObject;
|
207
|
+
WebBrowser.Document.InvokeScript("cs_func", new string[] { "Hello, world!" });
|
208
|
+
return ParseResultObject.Result;
|
209
|
+
}
|
210
|
+
|
211
|
+
[ComVisible(true)]
|
212
|
+
public class ParseResult
|
213
|
+
{
|
214
|
+
public string Result { get; set; }
|
215
|
+
}
|
216
|
+
}
|
217
|
+
}
|
218
|
+
```
|
219
|
+
|
220
|
+
次にWindows アプリケーションです。
|
221
|
+
Form1に同じようなコードを書いてみたところ、
|
222
|
+
Windows アプリケーションでも`(null)`が表示されるようになってしまいました。
|
223
|
+
|
224
|
+
```csharp
|
225
|
+
using System;
|
226
|
+
using System.Runtime.InteropServices;
|
227
|
+
using System.Windows.Forms;
|
228
|
+
|
229
|
+
namespace WindowsFormsApp1
|
230
|
+
{
|
231
|
+
public partial class Form1 : Form
|
232
|
+
{
|
233
|
+
public MyClass Parser;
|
234
|
+
|
235
|
+
public Form1()
|
236
|
+
{
|
237
|
+
InitializeComponent();
|
238
|
+
Parser = new MyClass();
|
239
|
+
var result = Parser.Parse();
|
240
|
+
Console.WriteLine(result ?? "(null)");
|
241
|
+
}
|
242
|
+
}
|
243
|
+
|
244
|
+
public class MyClass
|
245
|
+
{
|
246
|
+
public string Text { get; set; }
|
247
|
+
public object Result { get; private set; }
|
248
|
+
public WebBrowser WebBrowser { get; set; } = new WebBrowser();
|
249
|
+
public ParseResult ParseResultObject { get; set; } = new ParseResult();
|
250
|
+
public string Parse()
|
251
|
+
{
|
252
|
+
WebBrowser.DocumentText = @"
|
253
|
+
<html>
|
254
|
+
<head>
|
255
|
+
<meta charset=""utf-8"" />
|
256
|
+
<meta http-equiv=""X-UA-Compatible"" content=""IE=11"" />
|
257
|
+
<title>title</title>
|
258
|
+
</head>
|
259
|
+
<body>
|
260
|
+
<script>
|
261
|
+
function cs_func(text) {
|
262
|
+
external.Result = text;
|
263
|
+
}
|
264
|
+
</script>
|
265
|
+
<h1>Hello!</h1>
|
266
|
+
</body>
|
267
|
+
</html>
|
268
|
+
";
|
269
|
+
WebBrowser.ObjectForScripting = ParseResultObject;
|
270
|
+
WebBrowser.Document.InvokeScript("cs_func", new string[] { "Hello, world!" });
|
271
|
+
return ParseResultObject.Result;
|
272
|
+
}
|
273
|
+
|
274
|
+
[ComVisible(true)]
|
275
|
+
public class ParseResult
|
276
|
+
{
|
277
|
+
public string Result { get; set; }
|
278
|
+
}
|
279
|
+
}
|
280
|
+
}
|
281
|
+
```
|
282
|
+
|
283
|
+
しかし、Form1の上にボタンを設置し、クリックしたときに処理するようコードを変更したところ、
|
284
|
+
1回だけ押した時は`(null)`と表示され、2回目以降は`Hello, world!`と表示されるといった不安定な感じで表示されるようになりました。
|
285
|
+
|
286
|
+
```csharp
|
287
|
+
using System;
|
288
|
+
using System.Runtime.InteropServices;
|
289
|
+
using System.Windows.Forms;
|
290
|
+
|
291
|
+
namespace WindowsFormsApp1
|
292
|
+
{
|
293
|
+
public partial class Form1 : Form
|
294
|
+
{
|
295
|
+
public MyClass Parser;
|
296
|
+
|
297
|
+
public Form1()
|
298
|
+
{
|
299
|
+
InitializeComponent();
|
300
|
+
Parser = new MyClass();
|
301
|
+
}
|
302
|
+
|
303
|
+
// ここに追加しました。
|
304
|
+
private void Button_Click(object sender, EventArgs e)
|
305
|
+
{
|
306
|
+
var result = Parser.Parse();
|
307
|
+
Console.WriteLine(result ?? "(null)");
|
308
|
+
}
|
309
|
+
}
|
310
|
+
|
311
|
+
public class MyClass
|
312
|
+
{
|
313
|
+
public string Text { get; set; }
|
314
|
+
public object Result { get; private set; }
|
315
|
+
public WebBrowser WebBrowser { get; set; } = new WebBrowser();
|
316
|
+
public ParseResult ParseResultObject { get; set; } = new ParseResult();
|
317
|
+
public string Parse()
|
318
|
+
{
|
319
|
+
WebBrowser.DocumentText = @"
|
320
|
+
<html>
|
321
|
+
<head>
|
322
|
+
<meta charset=""utf-8"" />
|
323
|
+
<meta http-equiv=""X-UA-Compatible"" content=""IE=11"" />
|
324
|
+
<title>title</title>
|
325
|
+
</head>
|
326
|
+
<body>
|
327
|
+
<script>
|
328
|
+
function cs_func(text) {
|
329
|
+
external.Result = text;
|
330
|
+
}
|
331
|
+
</script>
|
332
|
+
<h1>Hello!</h1>
|
333
|
+
</body>
|
334
|
+
</html>
|
335
|
+
";
|
336
|
+
WebBrowser.ObjectForScripting = ParseResultObject;
|
337
|
+
WebBrowser.Document.InvokeScript("cs_func", new string[] { "Hello, world!" });
|
338
|
+
return ParseResultObject.Result;
|
339
|
+
}
|
340
|
+
|
341
|
+
[ComVisible(true)]
|
342
|
+
public class ParseResult
|
343
|
+
{
|
344
|
+
public string Result { get; set; }
|
345
|
+
}
|
346
|
+
}
|
347
|
+
}
|
348
|
+
```
|
349
|
+
|
350
|
+
全くもって原因が分かりません。
|
351
|
+
おそらく、Java Scriptの方には問題がない(上記に示すように不安定だが動くときは動くので)とは思うのですが、
|
352
|
+
原因と対処法を教えていただきたいです。
|
353
|
+
|
354
|
+
|
355
|
+
|
154
356
|
### 補足情報
|
155
357
|
|
156
358
|
ターゲットフレームワーク: `.NET Framework 4.7.1`
|
2
ソースコードの編集
title
CHANGED
File without changes
|
body
CHANGED
@@ -55,7 +55,6 @@
|
|
55
55
|
</html>
|
56
56
|
";
|
57
57
|
webBrowser1.ObjectForScripting = parseResult;
|
58
|
-
Console.WriteLine("after " + webBrowser1.DocumentText);
|
59
58
|
}
|
60
59
|
|
61
60
|
[ComVisible(true)]
|
@@ -115,7 +114,6 @@
|
|
115
114
|
";
|
116
115
|
WebBrowser.ObjectForScripting = parse;
|
117
116
|
WebBrowser.Document.InvokeScript("cs_func", new string[] { "test", "test 2" });
|
118
|
-
Console.WriteLine();
|
119
117
|
return parse.Result;
|
120
118
|
}
|
121
119
|
|
1
ソースコードのミス
title
CHANGED
File without changes
|
body
CHANGED
@@ -47,11 +47,7 @@
|
|
47
47
|
<body>
|
48
48
|
<script>
|
49
49
|
function cs_func(text, mode) {
|
50
|
-
var result = camxes.parse(text);
|
51
|
-
var result_str = camxes_postprocessing(result, mode);
|
52
|
-
window.external.Result = result_str;
|
53
50
|
window.external.Result = ""Hello, world!"";
|
54
|
-
alert(result_str);
|
55
51
|
}
|
56
52
|
</script>
|
57
53
|
<h1>Hello!</h1>
|
@@ -78,7 +74,7 @@
|
|
78
74
|
}
|
79
75
|
```
|
80
76
|
|
81
|
-
|
77
|
+
Button1を押すと、`button1_click`が呼び出され、コンソールに`Hello, world!`と表示されます。
|
82
78
|
|
83
79
|
コンソールアプリケーションの場合
|
84
80
|
|