【问题标题】:Maximum FlashVars length IE8?最大FlashVars长度IE8?
【发布时间】:2023-03-11 05:38:01
【问题描述】:

在使用 swfobject 和 IE8 时,flashvars 字符串是否有某种最大长度?

我通过 FlashVars 将 Facebook 会话对象传递到 Flash,在 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';

组装 FlashVar:

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 }

所以现在在 IE 中运行的 Flash 中尝试访问 stage.loaderInfo.parameters.session 会引发空对象错误,但在 FF 中可以正常工作。

我是否必须求助于通过 externalInterface 请求会话以避免 FlashVar 过载?

编辑:因此,将会话变量带走并稍后通过 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 开发工具中查看代码时,它确实会减少负载,但是将元素的内部 html 复制到文本编辑器中可以让您看到整个事物。所以会话字符串似乎没有损坏,但仍然没有正确进入闪存,loaderInfo.parameters.session 存在但为空,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}

【问题讨论】:

  • 另一件事是查看呈现的 HTML 并查看分配给会话的内容。
  • 我查看了 IE 开发工具,它显示了部分会话字符串,但只是停在一定长度。几乎看起来开发工具只是没有显示完整的行,但是当它应该是 lang 时 session 显示为 loaderInfo.parameters 的最后一个参数,并且 session 为空,这表明 IE 正在裁剪该行。我不认为转义会有所帮助,因为我现在在 Flash 中使用回调来设置数据,并且它通过 IE 中的未转义没有问题。
  • 好好看看会话字符串。它有任何非字母数字字符吗?
  • 你能发布会话字符串吗?
  • 是的,看起来您需要对其进行 urlencode。我认为管道和冒号是你的问题。 Flashvars 会通过查询字符串上的 swf。 IE 开发工具栏因无法呈现管道或冒号而损坏。

标签: flash actionscript-3 internet-explorer flashvars


【解决方案1】:

您需要对其进行 urlencode。我认为管道和冒号是你的问题。 Flashvars 会通过查询字符串上的 swf。 IE 开发工具栏因无法呈现管道或冒号而损坏。

【讨论】:

    【解决方案2】:

    所有浏览器都支持长度最大为 64KB(65535 字节)的字符串。 FlashVars 必须在 OBJECT 和 EMBED 标记中分配,以便在所有浏览器上工作。在Using FlashVars to pass variables to a SWF 上查看 Adob​​e 对 FlashVars 的看法。

    【讨论】:

    • 看,就是这里。总长度远不及 64KB,使用 swfobject 可确保正确放置 flashvar。跟踪 loaderInfo.parameters 对象时,会话前的变量被正确填充,会话后的变量不会出现。
    猜你喜欢
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 2010-09-15
    • 2014-10-03
    • 2011-11-06
    • 1970-01-01
    相关资源
    最近更新 更多