在PHP中获取实际的URL HASH

时间:2013-06-12 22:35:59

标签: php ajax

我知道这不可能通过PHP supervars,但请看这个网站:

当我们在页面上导航时,标题和元素只会发生变化,这也会影响Facebook,请参阅:

他是怎么做到的?我也有一个ajax导航系统,需要设置og,但我不知道如何做他的动态。

只是评论,他隐藏了INPUTS的元数值:

但我仍然不知道在呈现网站之前他如何解析这个问题。

2 个答案:

答案 0 :(得分:0)

URL片段永远不会发送到服务器。它被浏览器用作参考。 "传统"它用于滚动到具有片段引用的ID的元素,但最近它被赋予了一些更奇特的用途。

特别是,#!是一个shebang,其含义是"这个页面是由AJAX加载的,但是如果你相对于域加载以下内容,你将获得完整的页面和#34; - 这对搜索引擎特别有用。

基本上,使用AJAX与location.hash结合使其工作。

答案 1 :(得分:0)

它只是一些js(jQuery)

<script type="text/javascript">
    var current_page = '';
    $("a").live("click", function(){
        return change_hash(this,1);
    });
    function change_hash(el,type) {
        if(type==1) {
            var link = $(el).attr("href");
        }
        else
        {
            var link = el;
        }
        var link_ar = link.split('/#!');
        if(link_ar[1]!=undefined) {
            if((link_ar[1].length>3)&&(link_ar[1].substr(0,1)=='/')) {
                window.location.hash = '#!'+link_ar[1];
                return false;
            }
            else
            {
                return true;
            }
        }
        else
        {
            return true;
        }
        return false;
    }
    $(function(){
        $(window).hashchange( function(){
            address = location.hash.replace("#!","");
            var skip=false;
            if((address.substr(0,1)=='/')&&(address!=current_page)) {
                $("#content").html('<div class="content-box"><div class="ajax-loading">carregando...</div></div>');
                $("html, body").animate({ scrollTop: 0 }, "slow");
                if (address.indexOf(".php") == -1) {
                    var newaddress = address.replace(/[^a-zA-Z0-9_\.]+/g,"");
                    if('/'+newaddress!=address) { change_hash('/#!/'+newaddress,2);skip=true; }
                    address='/PerfilDetalhe.php?user='+newaddress;
                }
                if(skip==false) {
                    $.get('http://www.suamusica.com.br'+address,    function(htmldata) {
                        $("#content").html(htmldata); 
                        document.title = $('#metaTitle').val();
                        $('meta[name=description]').attr('content', $('#metaDescr').val());
                        $('meta[name=keywords]').attr('content', $('#metaKeywords').val());
                        $('meta[property="og\\:description"]').attr('content', $('#metaDescr').val());
                        $('meta[property=og\\:title]').attr('content', $('#metaTitle').val());
                        $('meta[property=og\\:url]').attr('content', $('#metaURL').val());
                        $('meta[property=og\\:image]').attr('content', $('#metaImage').val());
                        $('meta[property=og\\:type]').attr('content', $('#metaType').val());
                        $('meta[name=DC\\.title]').attr('content', $('#metaTitle').val());
                        $('meta[name=DC\\.description]').attr('content', $('#metaDescr').val());
                        $('meta[name=DC\\.subject]').attr('content', $('#metaKeywords').val());
                    }).fail(function() { $("#content").html('<div class="content-box error-box"><h1>Ooops!</h1><p>A página acessada não existe ou não foi encontrada.</p></div>'); });
                    current_page = address;
                }
                $.get('http://www.suamusica.com.br/msg_check.php',  function(resp) {
                    if(resp==1) {
                        $('#msg-notify').show();
                    }
                    else $('#msg-notify').hide();
                })

                 $('.tipsy-s').remove();
            }
        });
        var loc_h_n = window.location.hash.replace("#", "").replace("!", "").replace(".do", ".php")
        if(window.location.hash!='#!'+loc_h_n&&window.location.hash!='') {
            window.location.hash = '#!'+loc_h_n;
        }
        $(window).hashchange();
    });
</script>

你可以看到他根据标签值

返回点击和行为的假