gpt4 book ai didi

javascript - 使用 http 访问我的 facebook iframe 页面时,如何获得模式而不是弹出窗口?

转载 作者:行者123 更新时间:2023-11-29 17:24:36 25 4
gpt4 key购买 nike

当使用 fb.UI https 托管的 iframe 页面时,会提供一个正确的模式对话框,但通过 http 的同一页面会提供一个弹出窗口

这是我的代码,主要来自 facebook 对话框帮助页面:

<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:fb="https://www.facebook.com/2008/fbml">
<head>
<title>My Feed Dialog Page</title>
</head>
<body>
<p>oh, hello.</p>
<div id='fb-root'></div>
<script src='//connect.facebook.net/en_US/all.js'></script>
<p><a onclick='postToFeed(); return false;'>Post to Feed</a></p>
<p id='msg'></p>

<script>
FB.init({appId: "myappid", status: true, cookie: true});

function postToFeed() {

// calling the API ...
var obj = {
method: 'feed',
link: 'http://www.facebook.com/testapp/app_myappid/',
picture: 'http://fbrell.com/f8.jpg',
name: 'Facebook Dialogs',
caption: 'Reference Documentation',
description: 'Using Dialogs to interact with users.',

};

function callback(response) {
document.getElementById('msg').innerHTML = "Post ID: " + response['post_id'];
}

FB.ui(obj, callback);
}



</script>
</body>
</html>

所以当我通过 https://www.facebook.com/testapp/app_myappid 进入页面时我得到了一个正确的模式对话框,但是 http://www.facebook.com/testapp/app_myappid弹出一个可怕的窗口。

最佳答案

您是否尝试过添加display 参数,如下所示:

var obj = {
method: 'feed',
link: 'http://www.facebook.com/testapp/app_myappid/',
picture: 'http://fbrell.com/f8.jpg',
name: 'Facebook Dialogs',
caption: 'Reference Documentation',
description: 'Using Dialogs to interact with users.',
display: 'iframe'
};

...

FB.ui(obj, callback);

引用:https://developers.facebook.com/docs/reference/dialogs/


编辑

正如我发布的同一文档中所说:

If you specify iframe, you must have a valid access_token.

查看您的代码,您似乎确实跳过了身份验证过程。你看,你不能只调用 FB.init 然后开始使用 api,你需要让 SDK 对用户进行身份验证。

有一些方法可以做到这一点,你应该检查 Client-Side Authentication文档以获取更多信息。这是您修改后的代码,我添加了 FB.login 的使用SDK 的方法,它声明:

Calling FB.login results in the JS SDK attempting to open a popup window. As such, this method should only be called after a user click event, otherwise the popup window will be blocked by most browsers.

因此您可能需要授权此弹出窗 Eloquent 能工作,实际上您应该使用另一种方法(如该客户端身份验证文档中所述)或在用户单击某些内容后调用此方法。这只是为了让您朝着正确的方向前进:

function callback(response) {
document.getElementById('msg').innerHTML = "Post ID: " + response['post_id'];
}

function postToFeed() {
// calling the API ...
var obj = {
method: 'feed',
link: 'http://www.facebook.com/testapp/app_myappid/',
picture: 'http://fbrell.com/f8.jpg',
name: 'Facebook Dialogs',
caption: 'Reference Documentation',
description: 'Using Dialogs to interact with users.',
};

FB.ui(obj, callback);
}

FB.init({
appId: "myappid",
status: true,
cookie: true
});

FB.login(function(response) {
if (response.authResponse) {
postToFeed();
}
else {
alert("user NOT logged in");
}
});

第二次编辑

由于它是一个 Canvas 应用程序,并且您想避免登录弹出窗口,因此还有另一种解决方案。

如果您收到该错误消息,则意味着您(可能)缺少客户端身份验证,您可以传递从服务器端获得的访问 token 并在客户端中使用它,或者您可以执行类似这个:

window.fbAsyncInit = function() {
FB.init({
appId: "myappid",
status: true,
cookie: true
});

FB.getLoginStatus(function(response) {
if (response.status === "connected") {
postToFeed();
}
else {
console.log("not logged in to facebook or hasn't authorized the app");
}
};
};

function postToFeed() {
// calling the API ...
var obj = {
method: 'feed',
link: 'http://www.facebook.com/testapp/app_myappid/',
picture: 'http://fbrell.com/f8.jpg',
name: 'Facebook Dialogs',
caption: 'Reference Documentation',
description: 'Using Dialogs to interact with users.',
};

function callback(response) {
document.getElementById('msg').innerHTML = "Post ID: " + response['post_id'];
}

FB.ui(obj, callback);
}

这不会打开弹出窗口或任何类似的东西,只会检查用户登录状态。您可以阅读有关 FB.getLoginStatus 的更多信息方法。

此外,我建议使用 Channel File初始化js sdk时的参数。在这种情况下应该没有任何区别,但它更安全。

关于javascript - 使用 http 访问我的 facebook iframe 页面时,如何获得模式而不是弹出窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9992466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com