Index: server/swf/ASHandlers.cpp =================================================================== RCS file: /sources/gnash/gnash/server/swf/ASHandlers.cpp,v retrieving revision 1.60 diff -u -p -u -r1.60 ASHandlers.cpp --- server/swf/ASHandlers.cpp 2 Sep 2006 12:27:15 -0000 1.60 +++ server/swf/ASHandlers.cpp 10 Sep 2006 22:29:07 -0000 @@ -1599,27 +1599,40 @@ SWFHandlers::CommonGetUrl(as_environment return; } -#ifdef EXTERN_MOVIE -// log_msg("get url: target=%s, url=%s", target, url_c); - - character* target_movie = env.find_target(target); + character* target_movie = env.find_target((tu_string)target); if (target_movie != NULL) { - sprite_instance* root_movie = env.get_target()->get_root_movie(); - attach_extern_movie(url_c, target_movie, root_movie); + log_msg("TODO: play %s on %s!",url_c, target); } else { - log_error("get url2: target %s not found", target); + //See http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/open_0.asp + string command = "firefox -remote \"openurl("; + command += url.str(); + if (strcmp(target, "_blank") == 0) { + log_msg("TODO: Open %s on %s (new, unnamed, window)!",url_c, target); + command += ",new-window)\""; + } + /* TODO: I don't know how to open in a the current window or on the current frame + * It also has to be defined what to do when running gnash standalone + if (strcmp(target, "_parent") == 0) { + log_msg("TODO: Open %s on %s (into current frame's parent)!",url_c, target); + } + if (strcmp(target, "_self") == 0) { + log_msg("TODO: Open %s on %s (the url is load instead of the current page)!",url_c, target); + } + if (strcmp(target, "_top") == 0) { + log_msg("TODO: Open %s on %s (replaces any framesets that may be loaded)!",url_c, target); + } + if (strcmp(target, "_level0") == 0) { + log_msg("TODO: Open %s instead of the current movie!",url_c); + } + log_msg("TODO: If we reach here it means we should treat target %s as a frame name!", target); + */ + command += ")\""; + dbglogfile << "Launching URL... " << command << endl; + system(command.c_str()); } -#else - - string command = "firefox -remote \"openurl("; - command += url.str(); - command += ")\""; - dbglogfile << "Launching URL... " << command << endl; - system(command.c_str()); -#endif // EXTERN_MOVIE } } @@ -1636,8 +1649,14 @@ SWFHandlers::ActionGetUrl2(ActionExec& t assert( code[thread.pc] == SWF::ACTION_GETURL2 ); uint8_t method = code[thread.pc + 3]; + + const char* target = env.top(0).to_string(); + // handle malformed SWFs - if ( method > 2 ) + if ( method == 64 ) { + log_warning("Should load and render the SWF inside current SWF file (target=%s)",target); + } + if ( method > 2 && method != 64 ) { log_warning("Bogus GetUrl2 method (%d) in SWF file, set to 0", method); @@ -1645,7 +1664,6 @@ SWFHandlers::ActionGetUrl2(ActionExec& t } - const char* target = env.top(0).to_string(); as_value url_val = env.top(1); if ( url_val.is_undefined() )