如何在iframe中观察DOM的更改?

时间:2014-02-22 00:18:03

标签: javascript jquery

我正在使用Jquery-Mutation Summary https://code.google.com/p/mutation-summary/“一个JavaScript库,可以快速,方便,安全地观察对DOM的更改”

可在此处找到:https://github.com/joelpurra/jquery-mutation-summary

以下是工作中的一个示例:http://joelpurra.github.io/jquery-mutation-summary/example/demo.html

我希望能够从父窗口观察iframe对DOM的更改。这是我的代码

$(function() {
var $ChangeThere = $('#myframe') //iframe id myframe
    $ChangeThere.mutationSummary('connect', callback, [{
    all: true
}]);
function callback(summaries){
//something changes in iframe dom
    alert('change!');
}
});

上述代码不起作用。我也从同一个域访问。

2 个答案:

答案 0 :(得分:0)

您应该能够在iFrame中进行收听,然后将结果发送回父级。您可以在父级中建立一个函数,然后从iFrame更新它,如下所示。

父:

function alertfromiframe(message){
    alert(message);
}

的iFrame:

$(function() {
var $ChangeThere = $('#frameContents') //iframe id myframe
    $ChangeThere.mutationSummary('connect', callback, [{
    all: true
}]);
function callback(summaries){
//something changes in iframe dom
    parent.alertfromiframe('change!');
}
});

答案 1 :(得分:0)

从将作为iframe加载的页面公开方法:

var RPC = require('frame-rpc');
var origin = document.referrer;

var rpc = RPC(window, window.parent, origin, {
    beep: function (n, cb) {
        document.querySelector('#n').textContent = n;
        cb(n * 111);
    }
});

然后从包含iframe的父页面中获取:

var RPC = require('frame-rpc');
var frame = document.querySelector('iframe');
var usrc = new URL(frame.getAttribute('src'));
var origin = usrc.protocol + '//' + usrc.host;

frame.addEventListener('load', function (ev) {
    var rpc = RPC(window, frame.contentWindow, origin);
    rpc.call('beep', 5, function (result) {
        document.querySelector('#result').textContent = result;
    });
});

您可以在此处找到该模块:substack/frame-rpc 您可以使用wzrd.in/standalone/frame-rpc或

  

npm install frame-rpc