2014-10-02 30 views
7

C'è un errore quando uso ExternalInterface come di seguito:Che cosa significa "ExternalInterface esegue il escape delle stringhe utilizzando le convenzioni JSON" nel nuovo flash player 14?

ATTENZIONE: Per i contenuti pubblicati per Flash Player versione 14 o superiore, ExternalInterface sfugge stringhe utilizzando le convenzioni JSON. Per mantenere la compatibilità , contenuto pubblicato da precedenti versioni di Flash Player continua ad utilizzare il comportamento fuga legacy.

Cosa devo fare per evitare che l'avviso si visualizzi e che cosa sia "legacy escaping" che dovrei usare al posto di "convenzione JSON"?

+0

Qualcuno sa come rimuovere il messaggio di avviso? –

risposta

6

Questo avviso compare nella console debugger quando le stringhe vengono inviati da un file SWF in esecuzione di JavaScript che contengono caratteri non consentiti. Ciò potrebbe anche influire sul fatto che il deep linking funzioni come previsto.

Sia il ExternalInterface e BrowserManager API vengono effettuate. Se utilizzare il metodo escape() non è sufficiente per eliminare l'avviso, provare:

escape(str).replace(/\./g, "%2E").replace(/\:/g, "%3A").replace(/\//g, "%2F"); 
+1

Questa risposta corregge molti più casi in cui compare l'avviso, con l'immagine di [Dave Bleeker's anwser] (http://stackoverflow.com/a/28093823/244557) che lo rimuove solo da alcuni di essi. –

-4

In generale si dovrebbe evitare qualsiasi cosa con la parola "legacy" a meno che non si dispone di una buona ragione

Buoni motivi includono ma non si limitano troppo:

  1. Lo sforzo per convertire il vecchio codice di distanza dal il sistema legacy non è possibile all'interno dei tuoi attuali vincoli di business.
  2. Il sistema legacy contiene funzioni essenziali non fornite anche dal sistema più recente.

Il problema con i sistemi legacy è la società/gli sviluppatori non hanno l'obbligo di continuare a mantenerlo.

Questo messaggio di errore specifico che:

  1. Se si imposta il tuo obiettivo per Flash Player 14 o superiore, userà metodi di fuga che sono JSON compliant.
  2. Se questo è incompatibile con il tuo codice esterno è necessario indirizzare Flash Player 13 o inferiore.

"compliance JSON" o "convenzioni JSON" significa solo che tutti i caratteri che sono speciali per JSON saranno sfuggiti per prevenire potenziali errori

+0

non sono sicuro se la parola "bersaglio Flash Player alla versione 14" significa utente che accedere al mio sito utilizzerà Flash Player 14 o il mio Flash Builder dovrebbe essere costruire per indirizzare Flash Player 14. Se è il più tardi, non ho aggiornare la SDK per molto tempo. Ciò di cui ho paura è l'utente che l'aggiornamento a un nuovo Flash Player sarà in grado di tutto il mio codice esistente o meno.In caso contrario, cosa devo fare se non riesco a controllare la versione di Flash Player dell'utente. –

+0

"il contenuto pubblicato in versioni precedenti di Flash Player continua a utilizzare il comportamento di escape della legacy." Ciò significa che ciò che conta è ciò che imposti quando pubblichi, non ciò che l'utente ha. – CyanAngel

+2

Questa risposta non risponde alla domanda! –

10

L'errore è causato a causa di dati JSON non sfuggiti. È possibile impedire l'errore semplicemente scampo:

ExternalInterface.call(callBackFunction, escape(jsonData)); 

Spero che questo aiuti!

+1

Questo è molto meglio di una risposta rispetto alla risposta accettata. Upvote. –

+1

L'uso di 'replace's aggiuntivi da [CQ Bear's anwser] (http://stackoverflow.com/a/30202542/244557) elimina l'avviso in tutti i casi che ho trovato, opposto a questo solo risolvendo alcuni di essi . –

+0

Sto passando oggetti avanti e indietro da AS a JS e JS a AS e non è pratico o sempre possibile sfuggire a tutti gli oggetti e i dati. Non so se evaderlo sia ciò che Adobe sta suggerendo di iniziare. Il messaggio sta dicendo che il metodo di codifica è cambiato. Non dice che è rotto. A un livello veramente basso i dati sono stati inviati in formato XML come http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7caf.html. Ora è inviato come JSON. Ma nel browser questo è fatto dietro le quinte. Quindi il messaggio dovrebbe essere spento. –