我创建了一个fb应用。我使用FB.ui方法apprequests选择我发送给他们的朋友也想发布到墙上。这看起来像这样。
<div id="fb-root"></div>
<script src="http://connect.facebook.net/pl_PL/all.js" type="text/javascript"></script>
<script type="text/javascript" >
FB.init({
appId: myappID,
status: true, // check login status
cookie: true, // enable cookies to allow the server to access the session
xfbml: true, // parse XFBML
channelUrl : 'http://localhost:3435/Content/channel.html'
});
function invite(){
FB.ui({ method: 'apprequests',
message: 'You should learn more about this awesome game.',
data: 'tracking information for the user'
},
function (response) {
if (response && response.request_ids) {
len = response.request_ids.length; //# of reqs
var i = 0;
for (i = 0; i < len; i++) {
user_req_id = response.request_ids[i];
FB.api('/me/apprequests/?request_ids=' + toString(user_req_id),
function (response) {
$.post("http://localhost:3435/Home/PostToWall",
{ request_ids: response['data'][0]['from']['id'] },
function (data) { alert("Data Loaded: " + data); }
);
});
}
} else {
// alert('Post was not published.');
}
})
};
</script>
正如您所见,我想向
发送帖子请求[HttpPost, CanvasAuthorize(Permissions = "user_about_me,publish_stream,email")]
public ActionResult PostToWall(string request_ids)
{
/* Post to Wall Logic */
return View();
}
这适用于Chrome和Firefox,但在IE中,Action并未启动。
我准备了一个小样本javascript,你可以测试。这就是问题所在。
<script type="text/javascript" >
function CallPostToWall() {
$.post("http://localhost:3435/Home/PostToWall",
{ request_ids: 100001968250722 },
function (data) { alert("Data Loaded: " + data);}
);
};
</script>
<a href='#' onclick='CallPostToWall()'>Test Posting</a>
当在FF和Chrome中测试时,警报会返回预期html的操作,就像请求http://localhost:3435/Home/PostToWall?request_ids=100001968250722一样。
另一方面,在IE中。我得到了一些像:<html><head><script type="text/javascript">
top.location = "http://www.facebook.com/dialog/oauth/?scope=user_about_me,publish_stream,email&state=eyJyIjoiaHR0cDovL2FwcHMuZmFjZWJvb2suY29tL2NoaW5jenlrd3Nvc2llL0hvbWUvUG9zdFRvV2FsbCJ9&client_id=248066421875572&redirect_uri=http://localhost:3435/facebookredirect.axd";
</script></head><body></body></html>
我很遗憾。
有什么想法吗?
此致 西蒙
答案 0 :(得分:0)
也许这只是一种解决方法。通过从PostToWall定义中删除CanvasAuthorize(...)attrinbute,我设法让$ .post()运行/返回正确的视图
[HttpPost]
public ActionResult PostToWall(string request_ids)
{
/* Post to Wall Logic */
return View();
}
据我了解,在阅读了网上的几篇帖子之后,这可能是因为IE阻止了“跨站点脚本”的行为。
答案 1 :(得分:0)
最后! 我解决了我的问题,这是因为“同源策略”,只是在IE中加注!: 我只是将网址参数从'http://mysite.com/api/'更改为'/ api /' 它的工作原理!!!
希望对你们有些帮助!