无法让Disqus在单页应用中正常工作

时间:2014-05-13 07:52:53

标签: javascript jquery backbone.js disqus

在我的Backbone SPA中,我试图整合Disqus 所以在我看来,我已经添加了对此函数的调用:

addDisqus : function(element, pageID, pageTitle){
        if($("#disqus_thread").length == 0)
            $("#"+element).append('<div id="disqus_thread"></div>');

    /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
    if(_.not(this.disqusLoaded)){
        var disqus_developer = 1;
        var disqus_shortname = 'my_disqus_site';
        var disqus_identifier = pageID;
        var disqus_url = window.location.href;
        var disqus_config = function () { 
          this.language = global.lg;
        };

        /* * * DON'T EDIT BELOW THIS LINE * * */
        (function() {
            var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
            dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
            (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
        })();
        this.disqusLoaded = true;
    }



    setTimeout(function(){
        alert("reset disqus with "+pageID + " at " + window.location.href);
        DISQUS.reset({
        reload: true,
        config: function () {
            this.page.identifier = pageID;
            this.page.url =  window.location.href;
            this.page.title = pageTitle;
            this.language = global.lg;
        }
    });
    }, 4000);

我正在创建disqus iframe容器,只有它不存在,只在尚未加载的情况下加载嵌入式JS,并在每个渲染时使用新标识符和新url重置,这两者都取决于新的页。 (当代码工作时,我会通过更高效的方式更改setTimeout)

我的网址看起来像localhost:8080 / app#!pageID = 23432 - &gt;我加了!在disqus docs中声明的#like之后

评论加载,但它们对我的所有网页都相同。我不明白为什么,因为我每次使用一个基于pageID的不同标识符。

如果在&#34;重新加载&#34;函数,我通过.identifier = window.location.href交换.identifier = pageID 。但这不是正确的方法,因为不同的URL可以访问同一页面,并且它会创建不同的disqus线程。

您怎么看?

2 个答案:

答案 0 :(得分:0)

根据Disqus文档,使用带有哈希片段的url作为唯一标识符:

DISQUS.reset({
  reload: true,
  config: function () {  
    this.page.identifier = "newidentifier";  
    this.page.url = "http://example.com/#!newthread";
  }
});

请注意,this.page.identifier和this.page.url对于每组评论都必须是唯一的。

答案 1 :(得分:0)

  /* * * Disqus Reset Function * * */
var resetDisqusPlugin = function () {
    if (typeof DISQUS === 'undefined') {
        setTimeout(function(){
            resetDisqusPlugin();
        },3000);
    } else {
        try{
            DISQUS.reset({
                reload: true,
                config: function () {
                    this.page.identifier = newIdentifier;
                    this.page.url = newUrl;
                    this.page.title = newTitle;
                }
            });
        } catch(e){}
    }
};