2012-11-20 63 views
1

如果我寫在Chrome的JavaScript控制檯的代碼,我可以通過輸入檢索整個HTML源代碼:提取一個Facebook頁面的源代碼中使用JavaScript

var a = document.body.InnerHTML; alert(a); 

在Facebook fb_dtsg,我可以很容易通過寫作解壓:

var fb_dtsg = document.getElementsByName('fb_dtsg')[0].value; 

現在,我想從Facebook頁面提取代碼 「H = AfJSxEzzdTSrz-PS」。 h值對Facebook報告尤其有用。

如何獲得報告的h值?我不知道h值是什麼;與不同用戶交流時,h值完全不同。沒有那個正確的價值,你不能報告。其實,h值是AfXXXXXXXXXXX('Af'後的11個字符值),這就是我所知道的。

你有什麼想法獲得價值或任何功能在Facebook頁面上生成。

Facebook的源代碼片斷如下,你可以在Facebook上的個人資料查看源代碼,並搜索H = AF,你會得到的值:

<code class="hidden_elem" id="ukftg4w44"> 
<!-- <div class="mtm mlm"> 
    ... 
    .... 
    <span class="itemLabel fsm">Unfriend...</span></a></li> 
    <li class="uiMenuItem" data-label="Report/Block..."> 
    <a class="itemAnchor" role="menuitem" tabindex="-1" href="/ajax/report/social.php?content_type=0&amp;cid=1352686914&amp;rid=1352686914&amp;ref=http%3A%2F%2Fwww.facebook.com%2  F%3Fq&amp;h=AfjSxEzzdTSrz-pS&amp;from_gear=timeline" rel="dialog"> 
    <span class="itemLabel fsm">Report/Block...</span></a></li></ul></div> 

    ... 
    .... 
    </div> --> 
    </code> 

請指引我。如何準確地提取這個值?

我試着用下面的代碼,但註釋塊阻止我提取代碼。如何提取註釋塊內的值?

var a = document.getElementsByClassName('hidden_elem')[3].innerHTML;alert(a); 

回答

1

這是我第一次嘗試,假設你不怕一點點的jQuery:

// http://stackoverflow.com/a/5158301/74757 
function getParameterByName(name, path) { 
    var match = RegExp('[?&]' + name + '=([^&]*)').exec(path); 
    return match && decodeURIComponent(match[1].replace(/\+/g, ' ')); 
} 

var html = $('.hidden_elem')[0].innerHTML.replace('<!--', '').replace('-->', ''); 
var href = $(html).find('.itemAnchor').attr('href'); 
var fbId = getParameterByName('h', href); // fbId = AfjSxEzzdTSrz-pS 

Working Demo

編輯:一種無需jQuery的:

// http://stackoverflow.com/a/5158301/74757 
function getParameterByName(name, path) { 
    var match = RegExp('[?&]' + name + '=([^&]*)').exec(path); 
    return match && decodeURIComponent(match[1].replace(/\+/g, ' ')); 
} 

var hiddenElHtml = document.getElementsByClassName('hidden_elem')[0] 
    .innerHTML.replace('<!--', '').replace('-->', ''); 

var divObj = document.createElement('div'); 
divObj.innerHTML = hiddenElHtml; 

var itemAnchor = divObj.getElementsByClassName('itemAnchor')[0]; 
var href = itemAnchor.getAttribute('href'); 

var fbId = getParameterByName('h', href); 

Working Demo

我真的很想提供「取消註釋」的HTML不同的解決方案,但我在正則表達式:)

+0

魔獸..你釘它。謝謝〜 –

+0

科裏,你能幫我多一點時間嗎?我可以使用Jquery。它工作正常。 在該註釋塊中,有6個具有itemAnchor類的鏈接。基本上你的功能取第一個鏈接。那麼我怎樣才能拾取具有ItemAnchor類的第6個鏈接?非常感謝你。你可以用Jquery向我解釋。感謝Cory。你對我幫助很大。 –

+0

+1工作演示:) – Jono

相關問題