How do you call a JavaScript method that returns a result?
EvaluateScriptAsync
はTask<JavascriptResponse>
を返します。
cs
1Task<JavascriptResponse> task = browser.EvaluateScriptAsync(script);
通常はawait
してJavascriptResponse
を取得すればいいでしょう。
cs
1JavascriptResponse response = await browser.EvaluateScriptAsync(script);
成功していればresponse.Success
がtrue
です。
戻り値はresponse.Result
にobject
で入っています。キャストして使用してください。
制限もあるようですので参考URLの前後もチェックしてください。
cs
1using System.Diagnostics;
2using System.Windows;
3using CefSharp;
4using CefSharp.Wpf;
5
6namespace Questions244110
7{
8 public partial class MainWindow : Window
9 {
10 private ChromiumWebBrowser chrome;
11 public MainWindow()
12 {
13 InitializeComponent();
14
15 chrome = new ChromiumWebBrowser { Address = "https://teratail.com/tags/WPF/new/1", };
16 chrome.LoadingStateChanged += OnLoadingStateChanged;
17 Content = chrome;
18 }
19
20 private async void OnLoadingStateChanged(object sender, LoadingStateChangedEventArgs e)
21 {
22 if(!e.IsLoading)
23 {
24 JavascriptResponse response = await chrome.EvaluateScriptAsync("1+2");
25 Debug.WriteLine(response.Result); // 3
26
27 response = await chrome.EvaluateScriptAsync("aaa");
28 Debug.WriteLine(response.Success); // False
29 Debug.WriteLine(response.Message); // ncaught ReferenceError: aaa is not defined
30
31
32 string script = @"var bool = false;" +
33 "if(document.body.innerHTML.includes('CefSharp')){" +
34 "bool = true;" +
35 "}" +
36 "bool;";
37 response = await chrome.EvaluateScriptAsync(script);
38
39 if(response.Success)
40 {
41 string s = (bool)response.Result ? "ありました" : "ありませんでした";
42 Debug.WriteLine($"CefSharpの質問が{s}");
43 }
44 else
45 {
46 Debug.WriteLine($"スクリプトエラー! {response.Message}");
47 }
48 }
49 }
50 }
51}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/29 12:30