Максимальная длина FlashVars IE8? - PullRequest
0 голосов
/ 28 апреля 2011

Существует ли какая-нибудь максимальная длина строки flashvars при использовании swfobject и IE8?

Я передаю объект сеанса Facebook во Flash через FlashVars, и в FF и Chrome это работает нормально. В IE, однако, кажется, что передается только определенное количество данных, и строка обрезается в произвольной точке. Это приводит к тому, что Flash неправильно анализирует входящие данные.

PHP, который получает объект сеанса:

function parse_signed_request($signed_request, $secret) {
    list($encoded_sig, $payload) = explode('.', $signed_request, 2); 
    $sig = base64_url_decode($encoded_sig);
    $data = json_decode(base64_url_decode($payload), true);
    return $data;
}

function base64_url_decode($input) {
    return base64_decode(strtr($input, '-_', '+/'));
}

if(isset($_REQUEST['signed_request'])) {
    $session = json_encode(parse_signed_request($_REQUEST['signed_request'],'<<APP SECRET>>'));
} else {
    $session = '';
}

$lang = 'UK';

Сборка FlashVars:

var flashvars = {
    popUpsAllowed:true,
    deployPath:"<<PATH>>",
    fb_type:"popup", 
    fb_environment:"iframe",
    fb_app_id:"<<APP ID>>",
    fb_redirect:"<<REDIRECT URL>>",
    session:'<?php echo $session; ?>',
    lang:'<?php echo $lang; ?>',
    nobreak:null }

Так что теперь во Flash, работающем в IE, при попытке доступа к stage.loaderInfo.parameters.session выдается ошибка нулевого объекта, но он отлично работает в FF.

Должен ли я прибегнуть к запросу сеанса через externalInterface, чтобы избежать перегрузки FlashVars?

РЕДАКТИРОВАТЬ: Так что удаление сеансовой переменной var и запрос ее позже через ExternalInterface работает, но я хотел бы знать, виноват ли это IE или плагин ActiveX.

Данные сеанса выглядят следующим образом (некоторые числовые символы изменены):

{"algorithm":"HMAC-SHA256","expires":1304334000,"issued_at":1304327676,"oauth_token":"100076334000000|0.kNHAz0AST_cq0jo7WLWldQ__.0000.0004334000.1-000000000|UIy7h_0NFYByedFUGDkxOntP8Sg","user":{"country":"gb","locale":"en_GB","age":{"min":21}},"user_id":"000000000"}

Edit2: * Так что я идиот, когда вы просматриваете код в IE Dev Tool, он обрезает нагрузку, но копирование внутреннего html элемента в текстовый редактор позволяет вам увидеть все это , Таким образом, строка сеанса, кажется, не повреждена, но все еще не попадает во флэш-память правильно, loaderInfo.parameters.session существует, но имеет значение null, а loaderInfo.parameters.lang не определено.

Это фактический вывод в браузере FlashVars:

var flashvars = {
    popUpsAllowed:true,
    deployPath:"http://www.mydomain.com",
    fb_type:"popup",
    fb_environment:"iframe",
    fb_app_id:"00000000000000000000000000000000",
    fb_redirect:"http://apps.facebook.com/myApp/iframe_popup.php",
    session:'{"algorithm":"HMAC-SHA256","expires":1304416800,"issued_at":1304412506,"oauth_token":"000176004606000|2.01KBxkU8muE0AeIQSNlXLg__.3000.1304400800.0-500428000|_KXAwxTxzGSmasOu0KlNFHQ0d7A","user":{"country":"gb","locale":"en_GB","age":{"min":21}},"user_id":"000000000"}',
    lang:'UK',
    nobreak:null}

Ответы [ 2 ]

3 голосов
/ 15 июня 2011

Вам нужно его кодировать. Трубы и двоеточия, я думаю, в чем твоя проблема. Flashvars проходят к SWF в строке запроса. Панель инструментов разработчика IE ломалась, потому что не могла отобразить канал или двоеточие.

2 голосов
/ 28 апреля 2011

Все браузеры будут поддерживать длину строки до 64 КБ (65535 байт).FlashVars должны быть назначены в тегах OBJECT и EMBED, чтобы работать во всех браузерах.Ознакомьтесь с обзором Adobe FlashVars на Использование FlashVars для передачи переменных в SWF .

...