调用Facebook的BigPipe onPageletArrive脚本

时间:2011-09-07 18:21:49

标签: javascript ajax jquery

我正试图从Facebook帐户设置页面中删除一个浏览器应用程序的信息,该应用程序将向Facebook成员提供反馈。我想在几页中阅读并使用jQuery抓取而不显示页面。不幸的是,我无法使用我尝试的三种方法中的两种方法将Facebook的BigPipe代码作为页面加载的一部分运行。

下面的第三种方法似乎有效,但我仍然想知道为什么其他两种方法都失败了。有没有办法触发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');

1 个答案:

答案 0 :(得分:2)

BigPipe打印静态标头并使HTTP连接保持打开状态。通过附加javascript标记将其他内容无序添加到文档中。前两种方法不起作用,因为它们只抓取页面的扁平内容(相当不起眼),并且不对其执行BigPipe文档修改脚本。

最后一种方法 可以正常工作,因为它的行为类似于新的浏览器窗口。