最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - AS3 - ExternalInterface.addCallback, Access of undefined property - Stack Overflow

programmeradmin2浏览0评论

I am trying to use javascript to run AS3 functions. When I attempt to pile 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.

Here is my AS3 code:

ExternalInterface.addCallback("song4", PauseMusicExt);

And my Javascript & HTML:

 function returnVar3(song3) { return this[song3]; }
  <input type="submit" name="playButton" id="playButton" value="Submit" onClick="returnVar('song3')"/>

Edit: Here is the pauseMusic function:

function pauseMusicExt():void
    {
        songPosition = channel.position;
        channelSilence.stop();
        channel.stop();
        channel2.stop();
        btnPlay.mouseEnabled = true;
    }

I am trying to use javascript to run AS3 functions. When I attempt to pile 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.

Here is my AS3 code:

ExternalInterface.addCallback("song4", PauseMusicExt);

And my Javascript & HTML:

 function returnVar3(song3) { return this[song3]; }
  <input type="submit" name="playButton" id="playButton" value="Submit" onClick="returnVar('song3')"/>

Edit: Here is the pauseMusic function:

function pauseMusicExt():void
    {
        songPosition = channel.position;
        channelSilence.stop();
        channel.stop();
        channel2.stop();
        btnPlay.mouseEnabled = true;
    }
Share edited Sep 10, 2011 at 13:01 Benny 2,2284 gold badges26 silver badges39 bronze badges asked Sep 10, 2011 at 5:32 user547794user547794 14.5k38 gold badges108 silver badges153 bronze badges 4
  • I want to be able to run the AS function "pauseMusic" from the javascript function returnVar3 when the HTML button is clicked. Wheven I add the addCallback to AS I get an error – user547794 Commented Sep 10, 2011 at 5:50
  • Can u able to paste pauseMusic and song4 functions? – Benny Commented Sep 10, 2011 at 6:05
  • Sorry, that was a typo. It should be the song3 function. I just want to be able to click the HTML and run AS3 code. I might be doing this wrong. – user547794 Commented Sep 10, 2011 at 6:08
  • What is that evt:MouseEvent? U should remove that. – Benny Commented Sep 10, 2011 at 6:33
Add a ment  | 

2 Answers 2

Reset to default 4

I'm not sure about the extend of your app but you've got your addCallback function parameters mixed up..

See the doc, the first parameter is the name you want to expose the function as to javascript, the second is the actual internal AS3 function you want to trigger.

So the declaration should likely be something like:

ExternalInterface.addCallback("song4", pauseMusic);

(assuming that your function in the same scope as where you call addCallback)

That statement will create a "song4" method that you can call on your flash dom object

var fl = document.getElementById('myflashobject');
fl.song4()

After there's the issue that pauseMusic want a parameter (looks like you've made it a mouse event handler). You probably want to have a clean method that doesn't require a parameter like an internal as3 event param. Rewrite pauseMusic so it doesn't require it (you might need to create another method to handle the mouse event internally - like onPause(evt:MouseEvent), which then calls pauseMusic.

Edit: I don't know if a lot of people thought about doing that, but you can also totally use external interface to call firebug's console.log function to send messages to Firebug from flash (it's really helpful for debugging ExternalInterface issues, or any other flash problems - see the ExternalInterface.call function)

Hope u want to pause the audio player.

AS code :

 ExternalInterface.addCallback("sndToAS",rcvdFmJS);
    function rcvdFmJS(val){
       if (val == "pause"){
      audioPause();
       }
    }

JS code :

    document.getElementById("movie").sndToAS("pause");    
发布评论

评论列表(0)

  1. 暂无评论