2012 年 11 月21日更新 @ALL:我已经更新了示例,以便它更好地工作,并考虑了 Chris Jacob 和 FB Best Practices 的评论,看看这里的工作示例
嗨,正如所Promise的,这是我仅使用 javascript 的答案:
页面BODY的内容:
<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
  FB.init({
    appId  : 'YOUR APP ID',
    status : true, 
    cookie : true, 
    xfbml  : true  
  });
</script>
<div id="container_notlike">
YOU DONT LIKE
</div>
<div id="container_like">
YOU LIKE
</div>
CSS:
body {
width:520px;
margin:0; padding:0; border:0;
font-family: verdana;
background:url(repeat.png) repeat;
margin-bottom:10px;
}
p, h1 {width:450px; margin-left:50px; color:#FFF;}
p {font-size:11px;}
#container_notlike, #container_like {
    display:none
}
最后是 javascript :
$(document).ready(function(){
    FB.login(function(response) {
      if (response.session) {
          var user_id = response.session.uid;
          var page_id = "40796308305"; //coca cola
          var fql_query = "SELECT uid FROM page_fan WHERE page_id = "+page_id+"and uid="+user_id;
          var the_query = FB.Data.query(fql_query);
          the_query.wait(function(rows) {
              if (rows.length == 1 && rows[0].uid == user_id) {
                  $("#container_like").show();
                  //here you could also do some ajax and get the content for a "liker" instead of simply showing a hidden div in the page.
              } else {
                  $("#container_notlike").show();
                  //and here you could get the content for a non liker in ajax...
              }
          });
      } else {
        // user is not logged in
      }
    });
});
那么它有什么作用呢?
首先它登录到 FB(如果您已经拥有用户 ID,并且您确定您的用户已经登录到 Facebook,您可以绕过登录内容并替换response.session.uid为 YOUR_USER_ID(例如来自您的 rails 应用程序)
之后它对表进行 FQL 查询page_fan,意思是如果用户是页面的粉丝,它返回用户 id,否则返回一个空数组,然后根据结果显示一个 div或另一个。
这里还有一个工作演示:http : //jsfiddle.net/dwarfy/X4bn6/ 
它以可口可乐页面为例,尝试去喜欢/不喜欢可口可乐页面并再次运行它......
最后是一些相关的文档:
FQL page_fan 表
FBJS FB.Data.query
如果您有任何问题,请不要犹豫..
干杯
更新 2
正如某人所说,javascript 版本需要 jQuery 才能工作,但您可以轻松删除它(它仅用于 document.ready 和显示/隐藏)。
对于document.ready,您可以将您的代码包装在一个函数中并使用body onload="your_function"或更复杂的东西,例如:Javascript - 如何检测文档是否已加载(IE 7/Firefox 3),以便我们替换文档就绪。
对于显示和隐藏的东西,你可以使用类似的东西:document.getElementById("container_like").style.display = "none" or "block"以及更可靠的跨浏览器技术,请参见此处:http : //www.webmasterworld.com/forum91/441.htm
但是 jQuery 太简单了 :)
更新
相对于我在下面发布的评论,这里有一些 ruby 代码,用于解码 facebook POST 到您的 CANVAS URL 的“signed_request”,当它获取它以在 facebook 内显示时。
在您的动作控制器中:
decoded_request = Canvas.parse_signed_request(params[:signed_request])
然后是检查解码的请求并显示一页或另一页..(不确定这个,我对 ruby 不满意)
decoded_request['page']['liked']
这是相关的 Canvas 类(来自fbgraph ruby 库):
 class Canvas
    class << self
      def parse_signed_request(secret_id,request)
        encoded_sig, payload = request.split('.', 2)
        sig = ""
        urldecode64(encoded_sig).each_byte { |b|
          sig << "%02x" % b
        }
        data = JSON.parse(urldecode64(payload))
          if data['algorithm'].to_s.upcase != 'HMAC-SHA256'
          raise "Bad signature algorithm: %s" % data['algorithm']
        end
        expected_sig = OpenSSL::HMAC.hexdigest('sha256', secret_id, payload)
        if expected_sig != sig
          raise "Bad signature"
        end
        data
      end
      private
      def urldecode64(str)
        encoded_str = str.gsub('-','+').gsub('_','/')
        encoded_str += '=' while !(encoded_str.size % 4).zero?
        Base64.decode64(encoded_str)
      end
    end  
 end