如何在不同的URL上共享DISQUS

时间:2013-10-15 06:07:48

标签: javascript jquery disqus

我加载并显示DISQUS剪切,在AJAX提供的页面上轻松地重新加载

var id = this.getIdentifier(),
        disqus_shortname = 'myportal',
        disqus_identifier = id,
        disqus_title = id,
        disqus_url = "http://" + document.domain + "/#!" + id;

if ($('head script[src="http://' + disqus_shortname + '.disqus.com/embed.js"]').length == 0) {
        (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]).appendChild(dsq);
        })();
}

if (typeof DISQUS != "undefined") {
        DISQUS.reset({
                reload: true
        });
}

然而,试图在其他网址中加载相同的线程(在相同的位置)yelds blank(new)disqusion。

尝试使用以下方法在两者上加载相似的线程:

var id = "Disqusion about coding";
DISQUS.reset({
        reload: true,
        config: function () {
                this.page.identifier = id;  
                this.page.url = "http://myportal.com/#!" + id;
        }
});

给予单独的新威胁。

2 个答案:

答案 0 :(得分:1)

如果您完全关闭URL并仅使用标识符,则此代码似乎有效。此外,disqus_shortname disqus_identifierdisqus_url应该是window上下文的一部分。 (我无法在任何地方找到这个,但我在模块中发现了一些奇怪的边缘情况)

    var disqus_shortname = 'myportal',
    disqus_identifier = 'UNIQUE_IDENTIFER';

    if ($('head script[src="http://' + disqus_shortname + '.disqus.com/embed.js"]').length == 0) {
            (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]).appendChild(dsq);
            })();
    }

    if (typeof DISQUS != "undefined") {
            DISQUS.reset({
                    reload: true
            });
    }

http://help.disqus.com/customer/portal/articles/472098-javascript-configuration-variables

http://help.disqus.com/customer/portal/articles/472095-how-do-i-load-the-same-thread-of-comments-on-multiple-pages-

答案 1 :(得分:0)

我自己用计时器解决了这个问题 - 正在检查dsq对象,一旦发现我处理它并停止计时器。代码参考:

//
//
//
this.getIdentifier = function () {
    var identifier = $(sel_product).val() + '-' + $(sel_model).val();

    identifier = identifier.replace(/^\s+|\s+$/g, '').split(' ').join('_');

    return identifier;
};

//
//
//
this.loadDisqus = function () {
    var timerID = 'DisqusComments.loadDisqus';

    if ($(__selector_DisqusBox).length > 0) {
        var id = inst.getIdentifier(),
            disqus_shortname = 'shortnameid',
            disqus_identifier = id,
            disqus_title = id,
            disqus_url = "http://" + document.domain + "/#!" + id;

        Utilities.handleTimedEvent(timerID, callself(this, function () { disqusReset(); }), null, 100);

        if ($('body script[src="http://' + disqus_shortname + '.disqus.com/embed.js"]').length == 0) {
            (function () {
                var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = false;
                dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
                (document.getElementsByTagName('body')[0]).appendChild(dsq);
            })();
        }
    }

    function disqusReset() {
        if (typeof DISQUS != 'undefined') {
            DISQUS.reset({
                reload: true,
                config: function () {
                    this.page.identifier = disqus_identifier;
                    this.page.url = disqus_url;
                    this.page.title = disqus_title;
                }
            });

            Utilities.clearTimedEvent(timerID);
        }
    }

    disqusReset();
};