channel.html语言环境是否必须与最初包含的all.js匹配?

时间:2012-04-19 17:58:47

标签: facebook facebook-javascript-sdk

现在我的channel.html文件如下所示:

<?php
require_once __DIR__ . '/ay/includes/config.inc.php';

session_set_cookie_params(7200, '/' . AY_PROJECT_ID . '/', 'dev.anuary.com', FALSE, FALSE);

session_start();

$cache_expire   = 60*60*24*365;
header("Pragma: public");
header("Cache-Control: max-age=" . $cache_expire);
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $cache_expire) . ' GMT');
?>
<script src="//connect.facebook.net/<?=$_SESSION['ay']['fb']['user']['locale']?>/all.js"></script>

我想将其缩小为纯文件服务:

<script src="//connect.facebook.net/en_US/all.js"></script>

现在,使用以下内容包含原始all.js

(function(d){
    var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
    js = d.createElement('script'); js.id = id; js.async = true;
    js.src = 'https://connect.facebook.net/' + ay.locale + '/all.js';

    d.getElementsByTagName('head')[0].appendChild(js);
}(document));

ay.locale是基于签名请求而变化的变量。这有什么不同吗?

1 个答案:

答案 0 :(得分:1)

对于JS SDK的硬编码应该是“安全的”,只要它仍然是Facebook托管的版本。不同的语言环境不太可能不同步,不同文件之间的唯一区别是面向用户的字符串。

但是,我强烈建议您使用相同的网址,而不是硬编码一个区域设置。原因是如果您使用两个不同的URL,浏览器可能必须下载两次SDK。该库很大,因此可能会造成严重的用户体验问题。

当然,如果用户经常浏览使用en_US SDK的其他网站以及他自己的语言环境中的版本,则不太可能发生这种情况。如果文件被缓存,这将不是问题。