我需要在disqus窗體獲得更新後執行一些重新計算。一個新的評論,錯誤消息只是僅舉幾例。實質上是任何導致Disqus iframe垂直擴展的事件。檢查了API,但沒有發現任何公共事件。似乎事件不是公開訪問atm。所以第一個問題是 - Disqus是否有任何公共活動要附加到?有公共活動要附加到?
第二個將是 - 如果我無法附加到來自Disqus的事件我不知道MutationEvent會爲我考慮Disqus stuff是否在iFrame內?
我需要在disqus窗體獲得更新後執行一些重新計算。一個新的評論,錯誤消息只是僅舉幾例。實質上是任何導致Disqus iframe垂直擴展的事件。檢查了API,但沒有發現任何公共事件。似乎事件不是公開訪問atm。所以第一個問題是 - Disqus是否有任何公共活動要附加到?有公共活動要附加到?
第二個將是 - 如果我無法附加到來自Disqus的事件我不知道MutationEvent會爲我考慮Disqus stuff是否在iFrame內?
我不知道在特定的公共事件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);
誠然,它基本上是一個黑客。但它應該工作!
最好的我已經從這裏拿出到目前爲止
function disqus_config() {
this.callbacks.onNewComment = [function() { trackComment(); }];
}
做的鉻控制檯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]
等回調
and on
and trigger
methods
那麼,他們沒有記錄任何公共事件(據我所知)。但是,應用程序正在其父窗口上觸發大量事件。所以有可能傾聽他們並採取一些行動。你可以用下面的代碼來做到這一點:
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來測試它。
你有沒有找到答案? :D – TimPietrusky
不幸的是,蒂姆。 – spliter