Javascript discus';s iframe是否根据其内部内容自行调整大小?

Javascript discus';s iframe是否根据其内部内容自行调整大小?,javascript,jquery,html,web-applications,web,Javascript,Jquery,Html,Web Applications,Web,下面是一个例子: 向下滚动至评论。Discus在页面上插入一个iframe,然后在iframe中加载注释 不知何故,iframe知道它的内容有多高,并在插入的页面上扩展到该高度 有人知道这是怎么可能的吗?特别令人困惑,因为Discus的iframe是一个不同的域,所以我不知道任何脚本如何检测其中的内容。Discus正在使用它将消息从iframe发送回主机页。如果您查看主iframe中的JavaScript代码并搜索“postMessage”,您将发现以下代码(原始代码缩小,在此处重新格式化):

下面是一个例子:

向下滚动至评论。Discus在页面上插入一个iframe,然后在iframe中加载注释

不知何故,iframe知道它的内容有多高,并在插入的页面上扩展到该高度

有人知道这是怎么可能的吗?特别令人困惑,因为Discus的iframe是一个不同的域,所以我不知道任何脚本如何检测其中的内容。

Discus正在使用它将消息从iframe发送回主机页。如果您查看主iframe中的JavaScript代码并搜索“postMessage”,您将发现以下代码(原始代码缩小,在此处重新格式化):

这里使用
Bus
是有意义的:“在计算机体系结构中,总线是在计算机内部或计算机之间的组件之间传输数据的子系统。”()

我希望看到加载到主机页的内容,比如设置事件侦听器的代码的最后一部分,尽管我在粗略搜索加载到主机页的脚本时没有找到它


另请参阅在旧浏览器中使用的相关技术。

NPR页面包含许多来自mediacdn.disqs.com的JS文件。我强烈推荐Ben醋(来自Dischs)的作品,除了他的书之外。
 DISQUS.define("Bus", function() {
    function e(a) {
        a = a.split("/");
        return a[0] + "//" + a[2]
    }
    var g = DISQUS.use("JSON"),
        c = window.location.hash.slice(1),
        b = window.opener || window.parent,
        h = document.referrer,
        f = {};
    f.client = e(document.location.href);
    f.host = h ? e(h) : f.client;
    return {
        origins: f,
        messageHandler: function(a) {
            var b;
            try {
                b = DISQUS.JSON.parse(a.data)
            } catch (c) {
                return
            }
            if (!(b.name[0] === "!" && a.origin !== f.client)) switch (b.scope) {
            case "client":
                DISQUS.Bus.trigger(b.name, b.data)
            }
        },
        postMessage: function(a) {
            a.sender = c;
            a = g.stringify(a);
            b.postMessage(a, "*")
        },
        sendHostMessage: function(a, b) {
            b = b || [];
            DISQUS.Bus.postMessage({
                scope: "host",
                name: a,
                data: b
            })
        },
        sendGlobalMessage: function(a, b) {
            b = b || [];
            DISQUS.Bus.postMessage({
                scope: "global",
                name: a,
                data: b
            })
        }
    }
});
_.extend(DISQUS.Bus, Backbone.Events);
$(document).ready(function() {
    var e = window.addEventListener ? window.addEventListener : window.attachEvent,
        g = window.addEventListener ? "message" : "onmessage";
    if (!e) throw Error("No event support.");
    e(g, DISQUS.Bus.messageHandler, !1);
    window.onunload = function() {
        DISQUS.Bus.sendHostMessage("die")
    }