在下面的示例中,我有一个 html 页面,其中包含登录 facebook 所需的 javascript 代码。
在我有谷歌浏览器框架元标记,使页面与谷歌浏览器框架一起运行。如果您使用任何浏览器打开此页面,finish() 回调将正常运行。如果您使用 Google Chrome Frame 打开它,它永远不会触发。
所以这意味着每个试图登录以收集用户数据的 Facebook 应用程序都无法登录。如果页面是用谷歌框架打开的,就会发生这种情况。
但即使我删除了元标记以便页面可以使用 IE8 打开,页面也会再次使用谷歌浏览器框架打开,因为 Facebook 默认打开谷歌浏览器框架。
因此,因为这是一个在 facebook.com 内部运行的 Facebook 应用程序,所以它被迫使用 Google Chrome Frame 打开!
严重错误!我见过其他人报告它,有人也在这里制作了一个测试 facebook 应用程序:http: //apps.facebook.com/gcftest/
appID 和 channelUrl 在下面的示例中是虚拟的。
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<meta name="generator" content=
"HTML Tidy for Linux/x86 (vers 11 February 2007), see www.w3.org" />
<meta charset="utf-8" />
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=IE8" />
<title>Facebook Login</title>
<script type="text/javascript">
//<![CDATA[
// 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));
var appID = '0000000000000';
var channelUrl = '//myhost/channel.html';
// Init the SDK upon load
window.fbAsyncInit = function() {
FB.init({
appId : appID, // App ID
channelUrl : channelUrl,
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
FB.Event.subscribe('auth.statusChange', function(response)
{
if(!response.authResponse)
FB.login(finish, {scope: 'publish_actions,publish_stream'});
else
finish(response);
});
FB.getLoginStatus(finish);
}
function finish(response)
{
alert("Hello "+response.name);
}
//]]>
</script>
</head>
<body>
<h1>Facebook login</h1>
<p>Do NOT close this window.</p>
<p>please wait...</p>
</body>
</html>