Croix de Domaine ExternalInterface “Erreur lors de l'appel de méthode sur NPObject”
Je suis en train d'activer la communication entre le Javascript et le Flash via ExternalInterface dans tous les domaines. Le Javascript fonctionne très bien lorsqu'il est situé sur le même domaine que le fichier SWF. Mais dans un cas, le HTML se trouve sur Un domaine, le javascript et le flash résident tous les deux sur le domaine B. j'ai fait tous les éléments suivants:
- La balise embed a
allowScriptAccess="always"
(et l'objet a que comme un param) - Mon fichier SWF actionscipt a
Security.allowDomain("*")
- Mon SWF appelle aussi
Security.allowInsecureDomain("*")
- Les deux domaines A et B ont un
/crossdomain.xml
fichier qui aallow-access-from domain="*"
Le SWF est capable d'appel javascript sur la page, mais lorsque j'utilise le Javascript pour appeler des fonctions exposées par ExternalInterface, je reçois
Erreur lors de l'appel de méthode sur NPObject! [plugin exception: Erreur dans le code Actionscript. Utiliser un bloc try/catch pour trouver l'erreur.]
C'est ActionScript 2 ExternalInterface.marshallExceptions
n'est pas disponible.
- Êtes-vous le chargement de plusieurs fichiers swf? Ou est un swf sur Un domaine (le code HTML) le chargement de votre fichier swf sur le domaine B?
- Alex -- Bon point, je n'ai pas le mentionner. Le javascript dans le domaine B charge un fichier SWF à partir d'un domaine B, et que SWF charge un deuxième SWF de domaine B. Ce chargement semble fonctionner mais je ne peux pas être sûr, parce que je ne peut pas interagir avec le SWF.
Vous devez vous connecter pour publier un commentaire.
Vous devriez seulement besoin de deux choses pour que cela fonctionne:
1)
allowscriptaccess=always
permettra à votre swf pour envoyer des trucs à la page2)
System.security.allowDomain("yourhtmldomain.com");
Noter que c'est
System.security.allowDomain()
en AS2 - ce n'est pas le même que AS3 ou ce que vous avez écrit ci-dessus.numéro 2 ci-dessus permet de la page html sur domainA d'appeler les choses dans le fichier swf sur domainB.
Le domaine de votre js est hébergé sur ne sera pas question ici, puisque le navigateur intègre sur domainA, le script est exécuté dans domainA.
crossdomain.xml est principalement pour le chargement des fichiers à distance, qui vous ne faites pas, alors vous pouvez le supprimer si vous le souhaitez. (et vous ne voulez probablement pas avoir une crossdomain.xml fichier avec
allow="*"
assis sur votre domaine principal, qui est très mauvaise pratique)Puisque vous êtes le chargement de plusieurs fichiers swf, vous devrez peut-être inclure les paramètres de sécurité dans chacune de ces fonds souverains sur le domaine B qui sont chargés.
Vous pouvez également besoin d'un chargeur de contexte avec les paramètres de sécurité appropriés.
pour moi un peu de raison en était (je suis en utilisant uploadify):
serveur http n'avez pas la permission d'écrire le fichier de destination
swfobject (flash) n'ont pas de croix domaine de l'accès
solution:
objet de la balise en html doit avoir allowScriptAccess="always" il peut être fait par le jeu de param comme
il peut être fait par compiler les sources avec ce param, j'ai les, si vous en avez besoin, écrivez-moi avec uploadify sujet.
De serveur Distant, où flash inclure dans la page, doit avoir à la racine crossdamoin.xml fichier avec le contenu comme:
J'ai eu ce même problème (allowDomain etc. étaient bons), mais j'ai envoyer un flash à mauvais paramètre - juste outputed JSON de appel ajax. Problème disparu, quand j'ai mis que json "", et ensuite d'analyser en objet javascript (via jQuery.parseJSON).
À l'aide AS3 Flash Player version 10, je ne pouvais pas obtenir
ExternalInterface.addCallback()
de travailler correctement pour tester en local. J'ai enfin reçu ma copie locale de travail en ajoutant le paramètre "allowNetworking" avec une valeur de "tous" (http://www.adobe.com/livedocs/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001079.html). Bonne chance à toute personne aux prises avec ce!Dans mon cas, c'était parce que j'étais la modification de l'élément DOM contenant de l'uploader div.
J'ai utilisé jquery hide() fonction pour cacher le div contenant l'uploader, et quand j'ai réalisé qui a causé l'erreur ci-dessus, j'ai essayé une approche différente où j'ai mis le "float" attribut de la div. Dans les deux cas, il a cassé l'uploader.
FWIW, il semble que le réglage de la largeur ou de la hauteur de la div contenant l'uploader sur 0 ne PAS faire l'erreur de se produire.