Как получить возвращаемое значение из Cefscharp EvaluateScriptAsync - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь получить массив Image в Base64 из CefScharp EvaluateScriptAsync

Код:

JavascriptResponse response = await browser.EvaluateScriptAsync(@"
                                                                function foo(){
                                                                    var img = document.getElementsByTagName('IMG');
                                                                    var finalArray = {};
                                                                    for ( var i=0; i < img.length; i++ )
                                                                    {
                                                                        if (img[i].hasAttribute('indexvalue')){
                                                                                var c = document.createElement('canvas');
                                                                                var ctx = c.getContext('2d');
                                                                                ctx.drawImage(img[i], 10, 10);

                                                                                finalArray.push(c.toDataURL());
                                                                                $('canvas').remove();
                                                                              }
                                                                    }
                                                                    return finalArray;
                                                                }
                                                                    var res = foo();
                                                                ");

Это response.Result дает мне CefSharp.JavascriptResponse.Result.get returned null. Итак, как мне получить возвращаемый массив из скрипта, или подойдет любой простой пример.

1 Ответ

0 голосов
/ 20 апреля 2020

Проблема здесь заключалась в сценарии EvaluateScriptAsync, где функция была назначена на var res = foo(); и вместо нее должна быть foo(); только

Обновленный код

    JavascriptResponse response = await browser.EvaluateScriptAsync(@"
                                   function foo(){
                                                  var img = document.getElementsByTagName('IMG');
                                                  var finalArray = [];
                                                  for ( var i=0; i < img.length; i++ )
                                                      {
                                                        if (img[i].hasAttribute('indexvalue')){
                                                           var c = document.createElement('canvas');
                                                           var ctx = c.getContext('2d');
                                                           ctx.drawImage(img[i], 10, 10);
                                                           var dataURL = c.toDataURL('image/png');
                                                           finalArray.push(dataURL.replace(/^data:image\/(png|jpg);base64,/, ''));
                                                           $('canvas').remove();
                                                         }
                                                       }
                                                  return finalArray;
                                                 }
                                    foo();
                                                                                    ");
                //converting your response.Result into string array 
                string[] arr = ((IEnumerable)response.Result).Cast<object>()
                                 .Select(c => c.ToString())
                                 .ToArray();
...