我正在将我的脸书应用转换为通过HTTPS运行。
似乎当我将FB._https变量设置为true时,FB.Canvas.setAutoResize()
会停止调整iframe的大小。
这就是我的代码:
window.fbAsyncInit = function() {
FB._https = true; // troublemaker
FB.init({
appId: facebookAppId,
status: true,
cookie: true,
session: facebookSession,
xfbml: true
});
// The parameter show how many milliseconds to wait between
// resizing.
// Apparently, 91 is Paul's favorite number.
// http://developers.facebook.com/docs/reference/javascript/FB.Canvas.setAutoResize/
FB.Canvas.setAutoResize(91);
};
有什么想法吗?
答案 0 :(得分:4)
如果您设置FB._https = true;
并通过http访问该页面,则表示您遇到了问题。
我建议每Facebook JavaScript SDK over HTTPS loading non-secure items
使用FB._https = (window.location.protocol == "https:");
答案 1 :(得分:2)
删除指定FB._https的行。你不应该设置这个值。 JS SDK在加载时自行完成。自己设置是一个黑客 - 名称中的下划线应该表明该值不适用于外部修改。
您应该使用跨域通信渠道网址。有关此信息的信息记录在JavaScript SDK页面上。使用频道URL时,请确保不要指定“http:”或“https:”等协议。频道网址应以“//”开头,否则应根据document.location.protocol手动构建。
确保在应用程序的设置中正确设置了“站点URL”和“站点域”。这对于各种JS SDK功能至关重要。
答案 2 :(得分:0)
我遇到了同样的问题。这似乎取决于我放置连接脚本的位置。这是使SSL工作的代码。您必须删除连接脚本并使用channelUrl。
<!-- COMMENT OUT <script src="https://connect.facebook.net/en_US/all.js"></script>-->
<script type="text/javascript" charset="utf-8">
FB._https = (window.location.protocol == "https:");
window.fbAsyncInit = function() {
FB.init({
appId : 'xxxxxxxxxxxxx', // App ID
channelUrl : '<?php echo bloginfo('url');?>/channel.html', // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
oauth : true, // enable OAuth 2.0
xfbml : true // parse XFBML
});
FB.Canvas.setAutoGrow();
}
// Load the SDK Asynchronously
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document));
//FB.Canvas.setAutoGrow();
/*FB.Event.subscribe('edge.create',
function(response){
top.location.href = '';
}*/
这是让ifame重新调整大小但是会破坏ssl的代码。将连接脚本添加回顶部并删除channelUrl。实际上你不必删除channelUrl就可以了。
<script src="https://connect.facebook.net/en_US/all.js"></script>
<script type="text/javascript" charset="utf-8">
FB._https = (window.location.protocol == "https:");
window.fbAsyncInit = function() {
FB.init({
appId : 'xxxxxxxxxxxxxxx', // App ID
//channelUrl : '<?php echo bloginfo('url');?>/channel.html', // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
oauth : true, // enable OAuth 2.0
xfbml : true // parse XFBML
});
FB.Canvas.setAutoGrow();
}
// Load the SDK Asynchronously
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document));
//FB.Canvas.setAutoGrow();
/*FB.Event.subscribe('edge.create',
function(response){
top.location.href = '';
}*/
我不明白。
菲尔