我已将a Facebook app从FBML转换为iFrame(使用PHP SDK),现在显示的垂直滚动条与之前的内容相同(徽标,Flash游戏和下面3个链接的行) )。但早些时候我没有任何滚动条。
如果我将应用设置设置为自动调整大小,则内容的下半部分根本不会显示 - 这很糟糕,因此Flash游戏无法播放。
我搜索了所有建议的解决方案涉及Javascript,但我实际上使用的是PHP SDK。是不是只有PHP / CSS的解决方案?
在我当前的代码下面:
<?php
require_once('facebook.php');
define('FB_API_ID', 'XXX');
define('FB_AUTH_SECRET', 'XXX');
$facebook = new Facebook(array(
'appId' => FB_API_ID,
'secret' => FB_AUTH_SECRET,
'cookie' => true,
));
if (! $facebook->getSession()) {
printf('<script type="text/javascript">top.location.href="%s";</script>',
$facebook->getLoginUrl(
array('canvas' => 1,
'fbconnect' => 0,
#'req_perms' => 'user_location',
)));
exit();
} else {
try {
$me = $facebook->api('/me');
$first_name = $me['first_name'];
$city = $me['location']['name'];
$female = ($me['gender'] == 'male' ? 0 : 1);
$avatar = 'http://graph.facebook.com/' . $me['id'] . '/picture?type=large';
} catch (FacebookApiException $e) {
exit('Facebook error: ' . $e);
}
}
# print the logo, the flash game and 3 links
?>
此外,我不确定我的PHP脚本是否应该打印
<html>
<body>
.....
</body>
</html>
?目前我只打印身体内部的东西。
我想知道在我的代码中用PHP的标题替换 top.location.href = .... 是一个好主意('Location:....') ;吗
答案 0 :(得分:2)
如果您打算使用Asynchronous方法,建议您在其中放入尽可能多的FB代码。像下面这样的东西应该有效:
<html>
<head>
</head>
<body>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({appId: 'your app id', status: true, cookie: true,
xfbml: true});
FB.Canvas.setSize();
};
function sizeChangeCallback() {
FB.Canvas.setSize();
}
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol +
'//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
</script>
</body>
</html>
现在,只要对布局进行更改(单击新选项卡,加载Ajax内容等),就会调用sizeChangeCallback()
函数。
答案 1 :(得分:0)
好的,我找到了the solution:
<html>
<head>
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.Canvas.setSize();
}
function sizeChangeCallback() {
FB.Canvas.setSize();
}
</script>
</head>
<body>
......
<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
FB.init({
appId : '<?php print(FB_API_ID); ?>',
status : true,
cookie : true,
xfbml : true
});
</script>
</body>
</html>
并在设置标签中将 IFrame尺寸设置为自动调整大小。
标题('地址:'。$ url); 无论出于何种原因都无效。
答案 2 :(得分:0)
我只是在我的博客上整理了一个非常广泛的教程,也使用了PHP-SDK。除了摆脱这些滚动条,我还展示了如何创建扇形门和简单的共享按钮。我希望我可以帮助你们中的一些人:
答案 3 :(得分:0)
My Sollution每次都有效!在添加之前,让你的身体隐藏起来。
<div id="fb-root" class="fb_reset"><script async="" src="https://connect.facebook.net/en_US/all.js"></script></div>
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.init({appId: '293887700673244', status: true, cookie: true, xfbml: true, oauth: true});
window.setTimeout(function() {
FB.Canvas.setAutoGrow(); }, 250);
};
(function() { var e = document.createElement('script');
e.async = true;
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e); }());
</script>