2012-12-07 3 views
1

누구든지 Disqus에서 PJAX 또는 일반 #! AJAX와 같이 올바르게 작동하게 만들었습니까?DISQUS 및 Pushstate AJAX 또는 Hashbang

는이 일을하는 사람들의 몇 가지 예를 볼 수 있습니다 :

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

첫 번째는 해시 뱅 스타일과 두 번째 PJAX를 사용하고 있습니다. 이제 해당 사이트를 클릭하면 Disguus에서 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는 정리해야하는 새 페이지를로드하지만 항상 예외를 throw하는 null에 바인딩 된 일부 이벤트를 가져옵니다.

+0

iframe에 disqus를 넣을 수 있습니까? –

+0

나는 그 일을 고려했다. 이전에 시도했지만 스크롤하는 데 문제가 있었지만 정말 열심히 시도하지는 않았습니다. –

+0

아마 포기하고 * "여기를 클릭하여 설명을로드하십시오"* 전체 페이지를 다시로드 할 것입니다. –

답변

1

@ JanHančič은 iframe이 가장 좋은 경로라는 점에서 정확했습니다 (따라서 그가 대답한다면 나는 그를 정확하게 표시 할 것입니다). 내가 무슨 짓을 https://github.com/house9/jquery-iframe-auto-height

는 컨트롤러를 만드는 (또는 무엇이든 프레임 워크를 호출)와 같은 모든 URL을 처리하는 : 높이와 iframe이의 원활한으로 처리 할 수 ​​http://my.com/page에 대한 의견을로드 http://my.com/page/disqus을.

컨트롤러는 DISQUS 위젯을로드합니다 (html/body에 랩 됨). 그런 다음 http://my.com/page 템플릿에 iframe을 http://my.com/page/disqus에 포함시킵니다.