首先,我已经看到了一些具有相似意图的问题,但是他们的详细程度不够令人满意。
我正在尝试创建一个强制性门户网站身份验证页面,用户在单击某个Facebook页面的“赞”按钮时进行身份验证。我正在使用pfsense作为强制门户网站,目前,除了一些奇怪的问题外,其中大部分已经到位。
以下是身份验证页面的完整代码:
<!DOCTYPE html>
<html>
<head>
<title>Wifi Authentication</title>
</head>
<body>
<script>
// The following two blocks
// initializes Facebook SDK
window.fbAsyncInit = function() {
FB.init({
appId : '290884437749394',
status : true,
cookie : true,
xfbml : true,
version : 'v2.0'
});
};
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
<DIV ALIGN=CENTER>
<FONT COLOR="#ff3333" SIZE=+5>W</FONT>
<FONT COLOR="#cc6633" SIZE=+5>e</FONT>
<FONT COLOR="#999900" SIZE=+5>l</FONT>
<FONT COLOR="#33cc33" SIZE=+5>c</FONT>
<FONT COLOR="#339999" SIZE=+5>o</FONT>
<FONT COLOR="#3366cc" SIZE=+5>m</FONT>
<FONT COLOR="#0033ff" SIZE=+5>e</FONT>
<p>UROP2014</p>
</DIV>
<div class="fb-like" data-href="https://developers.facebook.com/docs/plugins/" data-layout="button" data-action="like" data-show-faces="false" data-share="false">
</div>
<form name="myform" method="post" action="$PORTAL_ACTION$"><input name="redirurl" type="hidden" value="$PORTAL_REDIRURL$"> <input name="accept" type="submit" value="Continue">
</form>
<script type="text/javascript">
window.onload = function() {
FB.Event.subscribe("edge.create", function(o) {
alert("!")
document.myform.submit();
alert("?")
});
FB.Event.subscribe("edge.remove", function(o) {
alert("!")
});
};
</script>
</body>
</html>
好的,这是一些奇怪的观察:
页面上的“like”按钮非常随机。有时它需要很长时间才能出现,有时它会立刻出现,有时它永远不会出现。我认为这与强制网络门户或连接到Facebook服务器的浏览器有关。显然我们已经允许与facebook相关的主机名,所以我们的服务器可以与它通信,但我们无法理解为什么这样的按钮是如此不稳定。
单击“继续”按钮(类型=&#39;提交&#39;输入)时,身份验证可以正常工作,但是当通过like-button事件提交表单时,身份验证不起作用( FB.Event.subscribe位)。具体来说,行document.myform.submit()似乎与单击提交按钮有不同的效果。符合这一点:
我尝试将代码更改为:
<script type="text/javascript">
window.onload = function() {
FB.Event.subscribe("edge.create", function(o) {
alert("!")
document.getElementById("accept").click();
alert("?")
});
FB.Event.subscribe("edge.remove", function(o) {
alert("!")
});
};
</script>
并单击了like按钮,现在代码在document.getElementById(&#34; accept&#34;)之后没有继续。单击();意味着下一行警报(&#34;?&#34;)不会发生。老实说,我发现这非常奇怪且不可预测。
有人能帮助我吗?请再向我询问一下。