我需要在disqus表单获得更新后执行一些重新计算。一条新评论,错误信息仅举几例。本质上任何导致Disqus iframe垂直扩展的事件。检查了API,但没有发现任何公共事件。似乎事件不是公开可访问的atm。所以第一个问题是 - Disqus是否有附加的公共事件?
第二个是 - 如果我无法附加来自Disqus的事件我想知道MutationEvent是否会为我考虑到这个问题,考虑到Disqus内容是在iFrame中?
答案 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(); }];
}
在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]
以及on
和trigger
方法
答案 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
});
}
。