Question

I would like to call js function via ExternalInterface from as3 code LOCALLY, not on remote server. All browsers work great but not Chrome. Note that in flash-debug player version (C:\Windows\system32\Macromed\Flash\NPSWF32_11_9_900_170.dll, version 11,9,900,170) I have installed in Chrome it works. But in default flash player version (C:\Program Files\Google\Chrome\Application\33.0.1750.117\PepperFlash\pepflashplayer.dll, version 12.0.0.70) it doesn't work.

PS: I've also tried to open my old project (with ExternalInterface) I've developed 2 years ago -> same issue.

IDE I have used -> FlashBuilder4.6 and also tried in FlashDevelop. I am using AC_OETags.js in order to include swf into web-page.

ExternalInterface.call("someFunc","testMsg") calls when swf initializes.

Chrome version is 33.0.1750.117 m

Thanks in advance.

Was it helpful?

Solution

This is a bug in Chrome using the pepper plugin: https://code.google.com/p/chromium/issues/detail?id=137734

What's happening is that the trusted locations (set here: https://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html) aren't taken into account, so any Flash <-> JS interaction is broken.

It doesn't look like this bug is getting fixed (judging by the comments on the issue today, there's a good chance it'll get marked as a "Won't fix"), so for now there's 3 ways around it:

  • Use another browser - not ideal
  • Use the NPAPI plugin - the pepper plugin is the default, but it's mostly a set-once-and-forget sort of task
  • Run a local webserver - either something like apache (http://www.easyphp.org/) or node (http://nodejs.org/). This is Google's preferred method of dealing with this, as it more closely mimics network behaviour (including security stuff)

OTHER TIPS

This code helps you to check if PepperPlayer is installed:

checkPepperPlayer=function(){
    var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
    if (is_chrome) {
        var pluginsList = navigator.plugins;
        for (var plugin in pluginsList) {
            if (plugin && pluginsList[plugin] && pluginsList[plugin].filename) {
                var filename = pluginsList[plugin].filename;
                if (filename == "pepflashplayer.dll" || filename == "PepperFlashPlayer.plugin" || filename == "libpepflashplayer.so") {
                    return true;
                }
            }
        }
    }
    return false;
};
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top