Это, по-видимому, известная проблема, и похоже, что Adobe не собирается исправлять ее в ближайшее время.
Я нашел подробное объяснение этой проблемы, и в принципе проблема кажетсячтобы Flash не обрабатывал \
и &
должным образом, что может привести к ошибке javascript или повреждению данных при переносе из Flash в javascript.
Что Flash пытается делать при передаче данныхот Flash до JS - выполнить следующую вещь:
try {
__flash__toXML(yourJavascriptFunction("[DATA]")) ;
} catch (e) { "<undefined/>"; }
Проблема в том, что он помещает ваши данные в исходное состояние и вообще не избегает обратной косой черты.Если ваша строка содержит только \
и вы хотите вызвать console.log
, она попытается сделать следующее:
try {
__flash__toXML(console.log("\")) ;
} catch (e) { "<undefined/>"; }
Как вы можете видеть, это недопустимый JavaScript.Он выдаст ошибку в вашей консоли Javascript и никогда не вызовет console.log
.
. Решение состоит в том, чтобы либо использовать поведение Flash Ducktape, либо совершать некоторые неприятные действия, чтобы обойти его.Вспышка глючит, вы можете избежать черной косой черты, прежде чем передавать их.Это решение пока работает, но когда Flash исправит его (скорее всего, не в ближайшем будущем, если вы считаете, что эта ошибка известна более 4 лет), оно сломает ваше приложение.
другая возможность заключается в URL-кодировании символа, который Flash плохо обрабатывает (\
, "
, &
), и декодировании их на другой стороне.
Flash:
data = data.split("%").join("%25")
.split("\\").join("%5c")
.split("\"").join("%22")
.split("&").join("%26");
Javascript:
data = data.replace(/%22/g, "\"")
.replace(/%5c/g, "\\")
.replace(/%26/g, "&")
.replace(/%25/g, "%");
Это некрасиво, но работает.