在我的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线程。
您怎么看?
答案 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){}
}
};