2 votes

Ajouter une fonction Javascript à la portée globale

J'ai une application emscripten. J'ai un fichier javascript qui a une définition de fonction. Je charge ce fichier dans une chaîne et j'appelle ensuite emscripten_run_script sur celui-ci. Ensuite, j'essaie d'appeler cette fonction plus tard en utilisant une fonction inline EM_ASM mais il dit que la définition de la fonction est introuvable.

    std::ifstream file("script.js"); // script.js has "someFunc" defined
    std::string str((std::istreambuf_iterator<char>(file)),
                     std::istreambuf_iterator<char>());

    emscripten_run_script( str.c_str() );

     // the below give error "someFunc not defined"
     EM_ASM({
        someFunc();
    });

Cependant, si je charge ce fichier javascript dans une chaîne de caractères et que j'ajoute ensuite à cette chaîne l'appel à la fonction

    std::ifstream file("script.js"); // script.js has "someFunc" defined
    std::string str((std::istreambuf_iterator<char>(file)),
                     std::istreambuf_iterator<char>());

    auto combinedStr = str + "someFunc();";

    emscripten_run_script( combinedStr.c_str() ); // works fine

Comment puis-je ajouter une fonction javascript définie dans un fichier à la portée globale pour être utilisée ultérieurement ?

Le fichier javascript ressemble à ceci :

function someFunc()
{
}

1voto

John Sharp Points 671

Dans les tests que j'ai effectués, cela semble fonctionner, ce qui devrait être équivalent à ce que vous avez fait :

#include <stdio.h>
#include <emscripten.h>

int main()
{
    char script[] = "someFunc = function() {"
                    "console.log(\"hello\");"
                    "};";

    emscripten_run_script(script);

    EM_ASM({
        someFunc();
    });
}

Est-ce que votre script.js en déclarant que la fonction a une portée locale (par l'intermédiaire de la fonction var someFunc = function(){...}; ou autre) ? emscripten_run_script n'est pas exactement comme les JavaScripts eval et les variables locales n'existent que dans la portée de emscripten_run_script .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X