ActionScript 3.0 :: Control A Flash Video Player With External Javascript Commands Using 'ExternalInterface.addCallback'
Mar 26, 2009
I'm trying to control a Flash video player with external Javascript commands using 'ExternalInterface.addCallback' but I'm not having any success. Here is the HTML code:
I'm working on a Flash game that needs to call some Javascript on the page and get data back from it. Calling Javascript from Flash works. Calling the Flash functions from Javascript (often) doesn't. I'm using the Gaia framework.The swf is loaded in with SWFObjectThere's a button in the Flash file. On click, it uses ExternalInterface.call() to call a Javascript function. This works.The Javascript function calls a Flash function that was exposed with ExternalInterface.addCallback().Sometimes, the Javascript produces the following error: TypeError: myFlash.testCallback is not a function.
When the error happens, it affects all functions registered with addCallback(). Gaia and some of its included libraries use addCallback(), and calling those functions from Javascript also produces the TypeError.Waiting a long time before pressing the button in Flash doesn't solve the error.Having Flash re-try addCallback() periodically doesn't solve the errorWhen the error occurs, ExternalInterface.available = true and ExternalInterface.objectID contains the correct name for the Flash embed object.When the error occurs, document.getElementById('myflashcontent') correctly returns the Flash embed object.Edited to add:This issue shows up in Firefox 3.6, but not Chrome or IE8. I haven't tried older browsers.
I'm running the Debug version of the Flash player.My calls toExternalInterface.addCallback() are wrapped in a try...catch block. When the JS error occurs, the catch block is not triggered. It's a silent failure.The error occurs when testing on a webhost, with the swf loaded from the same server as the page it's on. I set allowScriptAccess = always.Setting flash.system.Security.allowDomain("mydomain") doesn't fix the error.From my Page class:
public class MyPage extends AbstractPage { // declarations of stage instances and class variables
I'm trying to create an overlay containing a flash player that is shown when a user clicks on a link. The div containing the player starts with display:none in CSS. Upon clicking, the div will be shown, and JS will use ExternalInterface to configure and start the player. The JS configures the player when it catches a "flash ready" event, which is fired by Flash on ADDED_TO_STAGE.All this works, except that the ExternalInterface callbacks are never created. The JS and AS3 work fine if the player is shown upon page load, or is hidden with visibility:hidden instead of display:none. I am aware that Flash will not be initialized with display:none, and this works as expected: when the Flash is unhidden, it fires its events and correctly initializes everything else (eg. GUI, other internal stuff). The only thing that doesn't happen as expected is that my ExternalInterface callbacks are not added.
ExternalInterface.available is true. It's not a timing problem, because even after several minutes the callbacks are still not present. The strangest bit is that the flash is able to call JS, fires JS events fine, and the code to fire the events comes after the code to add the callbacks. There are no errors thrown by any of the AS3 code. I'm seeing this problem in both Chrome and Firefox.
I'm trying to call a method inside a flash movie from js, every time the mouse leaves the "div". It works on Internet Explorer, but not in firefox. Here is the html script:
Here is example of the problem, there is an alert for the js and the flash should be able to remove the swf (see a gray background? it works! see a image, flash didn't receive the call): [URL]. This should work with internet explorer / safari / chrome (pc/mac) only firefox seams to reject this.
I'm trying to add an ExternalInterface.addCallback, to get a string back from a javascript function so that I can set the "visible" property of movie clip "title" to "true." Can someone tell me what I'm doing wrong?Here's my AS code:
Mainly because I have it ALWAYS working locally, when I test in a browser, but the moment I deploy to a server it stops working.
I've added trace commands and confirmed that ExternalInterface is in fact available before adding the callback, and an alert command in the javascript method correctly identifies the flash object. I also checked and allowscriptaccess is set to 'always'.
Could it have something to do with the flash being served on a remote server?
I am trying to use javascript to run AS3 functions. When I attempt to compile I'm getting an "Access of undefined property" error message. I've read a few things online about this but I'm still not understanding it. I want to have the flash file always listening for javascript.
I thought this question would answer my question, but I have applied the following fixes:
.as Security.allowDomain("*"); Security.allowInsecureDomain("*"); html param name="allowScriptAccess" value="always" />
[Code]...
And I am still seeing the ExternalInterface.addCallback method fail locally. It works on a web server, or in the dev folder. But not in an arbitrary local folder.
How can I control a flash movie in a window from a child (pop-up) window invoked via ExternalInterface's call method?
The name of the movie is myMovie. Using javascript in the popup, I try to access a function in the movie using document['myMovie'].flashFunction(). However, since the javascript is in the popup window and the flash is in another, the browser complains that the function is undefined.
This would have worked if the javascript and the movie were in the same window.
I have been trying to get this working for a while now and am at the end of any ideas or samples.In 2.0 it was setVariables and was not problem.But now I'm trying to get ExternalInterface.addCallback to work and just can't seem to get it to work.Just want to send a variable from javascript to actionscript class.Ok, here is the javascript:
Code: function thisMovie(movieName) { if (navigator.appName.indexOf("Microsoft") != -1) { return window[movieName];[code]....
I have been trying to get this to work but with no luck.It's in a .Net aspx page. Even stripped the page of everything but this with no luck. And no master page either or ajax.
This is so frustrating...I'm going to do my best to be concise here, so forgive me if I leave too much out.I'm also going to try to simplify so I don't get bogged in details. I have a set of html pages that guide you through a tutorial. The different pages are REALLY just one big page that has divs hide and unhide as you go through the flow via previous and next buttons.
There are 4 pages which play a video clip. Each video clip .swf contains an FLVPlayback component that plays an .flv, and uses an .swf skin file. All these things play fine. If you're watching a video and you click "NEXT" the sound is still playing because of course you're still on the same page. So we looked into it and found out about the whole ExternalInterface.addCallback thing.
This code works perfectly with Chrome, Firefox and Opera but won't do it in IE. And... I also would need to have it working on IE6 = PS: the alert works fine in all the browsers (except IE6,7,8 because of the .src attribute =_=)! So I think the problem isn't the object retriving.
I have never posted to this forum before but I am about to pull my hair outI've created a page that used External Interface before with no problems and I can't figure out what makes this one different. It works fine on both Firefox and Safari on a Mac. On a pc, however, the Flash has no problem calling JavaScript functions but the JavaScript can't call the ActionScript function. It doesn't matter if I try Firefox, IE7 or IE6. The error IE gives is that the object doesn't support the property or method.ere is the AS:
Code: this.createEmptyMovieClip("samplework_mc", 999); function loadWork(workname:String):Void {
I try to create a switcher-swf. Its purpose is to detect parameters like screensize and then decide whether to load lowres.swf or highres.swf. Both lowres.swf and highres.swf work when tested independently.
The problem is the switching doesn't work. It's not the loading- or switching procedure itself. Rather I tracked the problem down to this single line which is present in the classcode of both lowres.swf and highres.swf:
PHP Code:
ExternalInterface.addCallback("update", update);
All it does is make a function called "update" available for external javascript-calls. If this line is removed, everything else works (including "ExternalInterface.call()"-statements!). However, I absolutely need this update-function to be available.
It seems that loading fails when the swf to be loaded contains an ExternalInterface.addCallback-Statement.
how I would go about writing code with ExternalInterface.addCallback() that would have my flash file return to frame 1 if clicked outside of the flash movie (if clicked anywhere in the html page)?
In my Flex app, I need a Javascript control to call one of my Actionscript methods. Simple enough, according to the Flex/Actionscript documentation, I wrote this in my Actionscript code:
if (ExternalInterface.available) ExternalInterface.addCallback("setName", setNameInActiveWindow); In the Javascript control I wrote: document.getElementById('FlexAppId').setName(name);
Works great. Exactly as expected, so I went to production. But it doesn't work in production :(. Same exact code... I can't figure it out. The above Javascript code is run, but the callback is not executed in the Actionscript code.
I am trying to write C++ code to interface to arbitrary instances of flash player 10 contained in arbitrary web pages from IE. All I need to be able to do is:
1) determine if the player is playing,
2) start playback, and
3) stop playback.
I am searching for a way to so this programmatically, without resorting to simulating user input to the control.
I have played around with the IShockwaveFlash COM interface which works OK on some sites but not others (e.g. not on YouTube). I am wondering if it is possible to use IShockwaveFlash::CallFunction() with the appropriate XML string to invoke predefined functions in ActionScript that have not been explicitly exported using ExternalInterface.addCallback().
Or perhaps there is enough functionaly using accessibility and the IAccessible interface?
I have a HTML5 video with jquery hooking into the player like so: video.currentTime += 1; But when IE comes along and insists on using Flash plugins, none of my JQ will work - How am i supposed to control the video when Flash takes over from HTML5?
The player im falling back to is JQplayer as "player.swf"
I have a SWF loaded via a "swfobject.embedSWF()"I use Javascript's methods to pass calls via the flash APIs:call.player.sendEvent('LOAD', theFile)Using a XMLHttpRequest() call via GET to a PHP script I get a file url:Typing the URL into my browser starts the file, but passing the variable to the sendEvent() call does nothing. Why?
var response = http.responseText; loadFile(response); player.sendEvent('PLAY');
I want to build a web page with a button that when clicked opens up a javascript layer and loads a flash player inside that layer. And that layer would need a close button.
I have a flash video player in a div inside a webpage, I'm trying to create a button that will resize this div to fill the whole page and hide everything else behind it. Has anyone tried to do it?Problems:1. It causes the flash to reload and the video to restart2. In some cases a flash banner from the webpage overlays my video player no matter what z-index I give it.