我試圖從Facebook帳戶設置頁面抓取信息,以便爲Facebook會員提供反饋的瀏覽器應用程序。我想閱讀幾個頁面,並使用jQuery進行刮擦而不顯示頁面。不幸的是,我無法使用我嘗試過的三種方法中的兩種來使Facebook的BigPipe代碼作爲頁面加載的一部分運行。調用Facebook的BigPipe onPageletArrive腳本
下面的第三種方法似乎可行,但我仍然想知道爲什麼其他兩個失敗。有沒有辦法觸發BigPipe onPageletArrival腳本使用jQuery .load()方法或document.implementation.CreateDocument運行?
更新:我沒有像我應該那樣簡潔地提出核心問題:如何獲得前兩種方法的行爲與iFrame方法相同?換句話說:當我開始使用嘗試1或2時,如何讓BigPipe腳本執行並填充內容?
嘗試1(使用document.implementation.createDocument):
html = getHttpPage('http://www.facebook.com/editprofile.php?sk=basic');
var fbPageHdr = /^<!DOCTYPE html><html[^>]+>/,
fbPageTail = /<\/html>/;
var dt = document.implementation.createDocumentType("html", "-//W3C//DTD HTML 4.01 Transitional//EN", "http://www.w3.org/TR/html4/loose.dtd");
var doc = document.implementation.createDocument('','', dt);
var htmlElem = doc.createElement('html');
html = html.replace(fbPageHdr, "");
html = html.replace(fbPageTail, "");
htmlElem.innerHTML = html;
doc.appendChild(htmlElem);
嘗試2(使用jQuery .load()方法):
var $njqNode = $();
$njqNode.load('http://www.facebook.com/editprofile.php?sk=basic' + ' body');
嘗試3 - 這一個工程! (使用jQuery和iFrame):
if ($('#hiddenpage').length == 0){
var $hiddenPage = $('<iframe id="hiddenpage" width="1000px" height="1000px"></iframe>');
$('body').append($hiddenPage);
}
$('#hiddenpage').attr('src', 'http://www.facebook.com/editprofile.php?sk=basic');
有沒有辦法使用前兩種方法觸發頁面更新以獲取完整內容? – user933318
毫不嘲笑一種新的瀏覽器環境,這在理論上是可行的,但對您的使用可能不切實際。使用iframe有什麼問題嗎? –
我想把這個項目變成一個更通用的刮板工具。不幸的是,對於這種用法,許多網站不希望在iFrame中顯示。他們反對將他們的內容嵌入其他網站。快速搜索中有幾篇文章描述瞭如何檢測頁面是否位於iFrame中,以及如何消除頁面。 – user933318