Closure minifies everything, so we can't actually create a local variable
called "Module". But, we can detect it, and use it. So if you do

====
var Module = {}; // add this line

importScripts("hello.js");

if (Module) {
    console.log("Module is defined");
}
====

it will work. That is how it works when not on a worker, too - the HTML
generally defines Module (and hooks it up to the canvas, etc.). Then
closure compiled code can see it.

- Alon



On Thu, Feb 26, 2015 at 3:37 AM, Stefano Sabatini <[email protected]>
wrote:

> Hi,
>
> I have this simple use case:
>
> hello-worker.html -----------------------8<---------------------
> <!doctype html>
> <html lang="en-us">
>   <head>
>     <meta charset="utf-8">
>     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
>     <title>Emscripten Test</title>
>     <script type="text/javascript">
>       var w = new Worker("hello-worker.js");
>     </script>
>   </body>
> </html>
> hello-worker.html -----------------------8<---------------------
>
>
> hello.c: -----------------------------8<------------------------
> #include <stdio.h>
>
> void foo(void)
> {
>     printf("foo\n");
> }
>
> int main() {
>     return 0;
> }
> hello.c: -----------------------------8<------------------------
>
>
> hello-worker.js ---------------------8<-------------------------
> importScripts("hello.js");
>
> if (Module) {
>     console.log("Module is defined");
> }
> hello-worker.js ---------------------8<-------------------------
>
> I compile hello.js with:
> EMCC hello.c -s NO_EXIT_RUNTIME=0 -s ASSERTIONS=1 -s
> EXPORTED_FUNCTIONS="['_foo']" --closure 1 -O2 -o hello.js
>
> For some reasons when the hello.js code is loaded from the worker,
> Module is not defined and I get:
>
> ReferenceError: Module is not defined hello-worker.js:3
> "run() called, but dependencies remain, so not running" hello.js:4
>
> This only happens with -O2 --closure 1, it will work with -O2
> --closure 0 or with -O1 --closure 1.
>
> The equivalent non-worker code is working fine (that is Module is
> correctly referenced):
> hello.html -----------------------8<---------------------
> <!doctype html>
> <html lang="en-us">
>   <head>
>     <meta charset="utf-8">
>     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
>     <title>Emscripten Test</title>
>     <script type="text/javascript" src="hello.js"></script>
>     <script type="text/javascript">
>     if (Module) {
>         console.log("Module is defined");
>     }
>     </script>
>   </body>
> </html>
> hello.html -----------------------8<---------------------
>
> BTW this is probably affecting Broadway, see
> https://github.com/mbebenita/Broadway/issues/45
>
> Can someone explain why this is happening? Should I file an issue?
>
> TIA
>
> --
> You received this message because you are subscribed to the Google Groups
> "emscripten-discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to