2012-12-07 31 views
1

有沒有人得到與PJAX或甚至常規的AJAX一樣正常工作。DISQUS和Pushstate AJAX或Hashbang

讓我們看看誰是這樣的人一些例子:

  1. http://donejs.com/
  2. http://www.playmodules.net/demo/1

第一種是使用Hash爆炸的風格,第二個PJAX。現在點擊這些網站,您會注意到Disqus中的gravatar圖標消失,如果您打開javascript控制檯,則通常會收到錯誤和日誌消息,因爲DISQUS對象無法解除綁定。

我已經盡了自己的隨機黑客(這是困難的,因爲我無法找到未通過微小加密了DISQUS JS):

(function() { 
    if (document.getElementById('my_disqus_script') && document.getElementById('disqus_thread')) { 
     //var ds = document.getElementById('my_disqus_script'); 
     //(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).removeChild(ds); 
     alert(window.location.href); 
     DISQUS.reset({ 
      reload: true, 
      config: function() { 
       this.page.identifier = 'disqus_thread'; 
       this.page.url = window.location.href + '#!disqus_thread'; 
      } 
     }); 
    } 
    else if (document.getElementById('disqus_thread')){ 
     var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; 
     dsq.id = 'my_disqus_script'; 
     dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js'; 
     (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); 
    } 
    else { 
     var ds = document.getElementById('my_disqus_script'); 
     if (ds) 
      (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).removeChild(ds); 
     if (window['DISQUS']) { 
      alert('cleanup'); 
      DISQUS.reset(); 
      DISQUS.cleanup(); 
      DISQUS = null; 
     } 
    } 
})(); 

基本上我嘗試了一堆的清理技術,這樣,當我的PJAX加載它應該清理的新頁面,但我總是會遇到一些綁定到null的事件拋出異常。

+0

你可以把disqus放入iframe嗎? –

+0

我曾考慮過這樣做。我嘗試過,但我有一些討厭的滾動問題,但我沒有真正努力嘗試。 –

+0

我可能會放棄並做一個*「點擊這裏加載評論」*這將做一個完整的頁面重新加載。 –

回答

1

@JanHančič是正確的,iframe是最好的路線(所以如果他回答我會標記他是正確的)。 (或任何你的框架調用它)https://github.com/house9/jquery-iframe-auto-height

我所做的是使一個控制器,處理像任何網址:高度和無縫的iframe可以處理http://my.com/page/disqus將加載註釋爲http://my.com/page

控制器只加載DISQUS小部件(包裹在html/body中)。然後在http://my.com/page模板中,您將iframe添加到http://my.com/page/disqus