Question

J'essaie d'activer la communication entre Javascript et Flash via ExternalInterface entre domaines. Le javascript fonctionne bien quand il se trouve sur le même domaine que le SWF. Mais dans un cas, le code HTML réside sur le domaine A, le code javascript et le code Flash résident tous deux sur le domaine B. J'ai effectué toutes les opérations suivantes:

  • La balise incorporée a allowScriptAccess = "toujours" (et l'objet l'a comme param)
  • L'actioncipt de mon fichier SWF a Security.allowDomain ("*")
  • Mon fichier SWF appelle également Security.allowInsecureDomain ("*")
  • Le domaine A et le domaine B ont tous deux un fichier /crossdomain.xml qui contient le code allow-access-from domain = "*" et
  • .

Le fichier SWF peut appeler du javascript sur la page, mais lorsque j'utilise le langage Javascript pour appeler des fonctions exposées par ExternalInterface, je reçois

.
  

Erreur lors de l'appel de la méthode sur NPObject! [exception du plugin: erreur dans Actionscript. Utilisez un bloc try / catch pour rechercher une erreur.]

Il s'agit d'ActionScript 2 et ExternalInterface.marshallExceptions n'est pas disponible.

Était-ce utile?

La solution

Pour que cela fonctionne, vous n'avez besoin que de deux choses:

1) allowedcriptaccess = always autorisera votre swf à envoyer des éléments à la page

.

2) System.security.allowDomain ("yourhtmldomain.com");

Notez qu'il s'agit de System.security.allowDomain () dans AS2 - ce n'est pas la même chose que AS3 ou ce que vous avez écrit ci-dessus.

numéro 2 ci-dessus permet à la page html sur domainA d'appeler des éléments du swf sur domainB.

Le domaine sur lequel votre js est hébergé n'a pas d'importance ici, car le navigateur l'intègre dans le domaine A, le script est exécuté dans le domaine A.

crossdomain.xml sert principalement au chargement de fichiers distants, ce que vous ne faites pas. Vous pouvez donc le supprimer si vous le souhaitez. (et vous ne voulez probablement pas avoir un fichier crossdomain.xml avec allow = "*" dans votre domaine principal, ce qui est une très mauvaise pratique)

Autres conseils

Étant donné que vous chargez plusieurs swfs, vous devrez peut-être inclure les paramètres de sécurité dans chacun des swfs chargés sur le domaine B.

Vous aurez peut-être également besoin d'un contexte de chargeur avec les paramètres de sécurité appropriés.

import flash.system.LoaderContext;
import flash.system.ApplicationDomain;
import flash.system.Security;
import flash.system.SecurityDomain;
import flash.net.URLRequest;
import flash.net.URLLoader;

var context:LoaderContext = new LoaderContext(true, ApplicationDomain.currentDomain, (Security.sandboxType == Security.REMOTE) ? SecurityDomain.currentDomain : null);
var l:Loader = new Loader();
l.load(new URLRequest("http://example.com/myswf.swf"), context);

pour moi, quelques raisons étaient (j'utilise uploadify):

le serveur http n'a pas la permission d'écrire le fichier dans la destination swfobject (flash) n'a pas d'accès interdomaine

solution: La balise object en HTML doit avoir allowScriptAccess = " always " cela peut être fait en paramétrant comme

$('#file_upload').uploadifySettings('scriptAccess', 'always')
than flash object must have:
import flash.system.Security;
Security.allowDomain('remotedomain.com'); 

cela peut être fait en compilant la source avec ce paramètre, je l’ai, si vous en avez besoin, écrivez-moi avec le sujet uploadify. Le serveur distant, où flash inclut dans la page, doit avoir dans la racine le fichier crossdamoin.xml avec un contenu tel que:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">

J'ai eu le même problème (allowDomain, etc. étaient bons), mais j'envoie au paramètre incorrect - je viens de sortir du JSON à partir d'un appel ajax. Le problème a disparu lorsque j'ai placé ce json dans "", puis que je l'ai analysé dans un objet javascript (via jQuery.parseJSON).

Utilisation de AS3 avec Flash Player version 10, je ne pouvais pas obtenir ExternalInterface.addCallback () fonctionner correctement pour les tests en local. Ma copie locale a finalement fonctionné en ajoutant le paramètre " allowNetworking " avec une valeur de "tout" ( http://www.adobe.com/livedocs/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001079.html ). Bonne chance à tous ceux qui luttent avec cela!

Dans mon cas, c’est parce que je modifiais l’élément DOM contenant le div uploader.

J'ai utilisé la fonction hide () de jquery pour masquer la div contenant l'uploader et, quand j'ai réalisé que c'était la cause de l'erreur ci-dessus, j'ai essayé une approche différente en réglant l'option "float". attribut de la div. Dans les deux cas, le téléchargement a été rompu.

FWIW, il semble que le réglage de la largeur / hauteur de la div contenant le programme de téléchargement sur 0 ne provoque PAS l’erreur survenant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top