1

Disqus を PJAX や通常の#!AJAXなどで適切に動作させた人はいますか?

これを行っている人々の例をいくつか見てみましょう。

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

1 つ目は Hash bang スタイルを使用し、2 つ目は 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例外をスローするイベントがいくつか発生します。

4

1 に答える 1

1

@JanHančičは、iframeが最適なルートであるという点で正しかったです(したがって、彼が答えた場合、私は彼を正しいとマークします)。iframe の高さとシームレスは、 https ://github.com/house9/jquery-iframe-auto-height で処理できます。

私がしたことは、のような url を処理するコントローラー (またはフレームワークがそれを呼び出すもの) を作成することhttp://my.com/page/disqusですhttp://my.com/page

コントローラーは DISQUS ウィジェット ( でラップhtml/body) をロードするだけです。次に、http://my.com/pageテンプレートに iframe を に含めますhttp://my.com/page/disqus

于 2012-12-08T15:36:20.773 に答える