Disqus是否有公共事件要附加?

时间:2012-07-01 18:30:00

标签: javascript events disqus mutation-events

我需要在disqus表单获得更新后执行一些重新计算。一条新评论,错误信息仅举几例。本质上任何导致Disqus iframe垂直扩展的事件。检查了API,但没有发现任何公共事件。似乎事件不是公开可访问的atm。所以第一个问题是 - Disqus是否有附加的公共事件?

第二个是 - 如果我无法附加来自Disqus的事件我想知道MutationEvent是否会为我考虑到这个问题,考虑到Disqus内容是在iFrame中?

4 个答案:

答案 0 :(得分:1)

我不确定针对Disqus的公开活动,但如果您只是需要监控对iframe高度的更改,这是一种方式:

var iframe = document.getElementById('myIframe');
var iframeHeight = iframe.clientHeight;

setInterval(function() {
    if(iframe.clientHeight != iframeHeight) {
        // My iframe's height has changed - do some stuff!

        iframeHeight = iframe.clientHeight;
    }
}, 1000);

当然,这基本上是一个黑客攻击。但它应该有效!

答案 1 :(得分:1)

我迄今为止最好的想法

function disqus_config() {
    this.callbacks.onNewComment = [function() { trackComment(); }];
}

从这里: http://help.disqus.com/customer/portal/articles/466258-how-can-i-capture-disqus-commenting-activity-in-my-own-analytics-tool-

在chrome控制台中执行console.log(DISQUS)会显示disqus对象,还有其他提及的回调

_callbacks: Object
  switches.changed: Array[2]
  window.click: Array[2]
  window.hashchange: Array[2]
  window.resize: Array[2]
  window.scroll: Array[2]

以及ontrigger方法

答案 2 :(得分:0)

嗯,他们没有记录任何公开事件(据我所知)。但是,应用程序在其父窗口上触发了很多事件。所以有可能听取他们并做出一些行动。您可以使用以下代码段执行此操作:

window.addEventListener('message', function (event) {
    // if message is not from discus frame, leap out
    if (event.origin != 'https://disqus.com' && event.origin != 'http://disqus.com') return;

    // parse data
    var data = JSON.parse(event.data);

    // do stuff with data. type of action can be detected with data.name 
    // property ('ready', 'resize', 'fakeScroll', etc) 
}, false);

在基于webkit的浏览器中,它可以正常工作。使用firefox可能会出现一些问题。使用IE浏览器......好吧,我手边没有任何IE来测试它。

答案 3 :(得分:0)

您可以在embed payload中找到可用事件的列表:

float:left

我没有找到任何文档(example for onNewComment除外),因此您需要从事件名称猜测它们的工作方式。

您可以通过以下方式使用它们:

callbacks:{
    preData:[],
    preInit:[],
    onInit:[],
    afterRender:[],
    onReady:[],
    onNewComment:[],
    preReset:[],
    onPaginate:[],
    onIdentify:[],
    beforeComment:[]
}

var disqus_config = function () {
    this.callbacks.onNewComment = [
        function() { 
            // your code
        }
    ];
};

在旁注中,我发现它们对于检测iframe的高度变化完全没有用。我最后使用了css-element-queries中的var disqus_config = function () { this.callbacks.onNewComment = this.callbacks.onNewComment || []; this.callbacks.onNewComment.push(function() { // your code }); }