Twitterの/homeのHTMLがXMLHttpRequestで取れなくなってる件
XMLHttpRequestで取りにいくと、HTMLではなくPrototype.jsのElement.replace関数を使った部分更新のscriptを返してくるようになった。
なので、http://twitter.com/homeで以下のコードを実行すると、
タイムラインの部分が部分更新される。
jQuery.ajax({ type:'GET', url:'http://twitter.com/home', dataType:'text', success:function(script){ eval(script); } });
リクエストヘッダのX-Requested-Withに「XMLHttpRequest」を設定しているのが原因だと思うので、
送信前に上書きしてみることにした所、FirefoxではHTMLを取得できたが、
Opera、Google Chromeでは相変わらずscriptが返ってきた。
jQuery.ajax({ type:'GET', url:'http://twitter.com/home', dataType:'text', beforeSend:function(xhr){ xhr.setRequestHeader('X-Requested-With',''); }, success:function(html){ console.info(html); } });
これらのブラウザではXMLHttpRequestのsetRequestHeaderメソッドでリクエストヘッダの上書きができないのだろうか?
いろいろと面倒くさいので、部分更新するscriptをevalするスコープ内で、
Element.replace関数を上書きすることで解決した。
jQuery.ajax({ type:'GET', url:'http://twitter.com/home', dataType:'text', success:function(script){ var Element = { replace:function(id,html){ if(id!='timeline')return; this.html = html; throw new Error(); } }; try{ eval(script); }catch(e){} console.info(Element.html); } });