2016-12-24 2 views
0

Je veux lire une valeur Javascript de la page, mais comment?Comment puis-je lire la variable Javascript avec Awesomium? C++

std::string jscript("[appdata]"); 
    JSValue value = view_->web_view()->ExecuteJavascriptWithResult(WSLit(jscript.c_str()), WSLit("")); 
    JSArray& arr = value.ToArray(); 
    std::string appdata = arr[0].ToString; 

Lorsque je tente d'utiliser ce que je reçois Awesomium :: JSValue :: ToString: syntaxe non standard; utilisation & 'pour créer un pointeur vers un membre

J'ai TBH aucune idée où mettre &

Répondre

0

Mon C++ est plutôt rouillé, mais ne vous devez ajouter entre parenthèses à la fin?

std::string appdata = arr[0].ToString(); 

En l'état actuel, le code semble essayer d'obtenir un pointeur vers une fonction membre ToString et l'affecter à std :: variable de chaîne.

+0

Eh bien, j'ai essayé cela et voici le résultat: ** Awesomium :: WebString 'à' std :: basic_string , std :: allocateur > pas approprié par l'utilisateur conversion définie de "Awesomium :: WebString" à "std :: string" existe ** – bugraarslan

+0

Donc, mon observation était correcte: vous étiez en train d'assigner le pointeur de fonction au lieu d'une valeur/objet. :) –

0

Eh bien, voici la réponse pour l'avenir wonderers:

JSValue MyValue = view_->web_view()->ExecuteJavascriptWithResult(WSLit("appdata"), WSLit("")).ToString(); 
    WebString asd(MyValue.ToString()); 
    std::string appdata = ToString(asd); 
0

Essayez de changer:

std::string appdata = arr[0].ToString; 

à

Awesomium::WebString appdata = arr[0].ToString(); 

Comme l'a dit Mike Klimentiev, vous affectez la méthode ToString à la variable appdata. Lorsque vous ajoutez les parenthèses, il effectue un appel de fonction plutôt qu'une affectation directe de la fonction à la variable.

De même, lorsque vous ajoutez les parenthèses, le message d'erreur du compilateur vous indique qu'il ne peut pas convertir le type "Awesomium :: WebString" en type "std :: string". Au tout début de la ligne, vous avez std::string appdata Cela déclare une variable appdata de type std::string. Toutefois, la méthode ToString() retourne un type de Awesomium::WebString pour lequel il n'y a pas de conversion du type std::string

EDIT: @bugraarslan Sur la base de l'expérience, je me méfie de votre solution de contournement. Il n'y a pas de conversion facile entre les deux types, car ils n'en ont pas écrit un. Habituellement, cela signifie que vous pouvez soit utiliser le type Awesomium::WebString ou combattre la bibliothèque en utilisant un type familier à savoir, std::string. Les bibliothèques ne se fatiguent pas dans leur entêtement, mais faites comme vous s'il vous plaît

Je n'ai pas assez de réputation pour commenter. Donc, j'ai dû modifier ma réponse à la place.