Javascript 从<;iframe>;文档到父文档

Javascript 从<;iframe>;文档到父文档,javascript,jquery,Javascript,Jquery,我想从中的子文档以及添加到页面中的访问元素及其事件和属性 我有一个调查,我正在使用将其包含到页面中。我想从调查中触发事件,因此当我进入调查页面时,LeadFacebook像素代码触发,当调查完成后,CompleteRegistrationFacebook像素代码触发。因此,我试图从到访问一些操作/事件 两个文档都在同一台服务器上,但它不工作 我试过这个: $(document).ready(function() { $('#assessment').load(function(){

我想从
中的子文档以及添加到页面中的
访问元素及其事件和属性

我有一个调查,我正在使用
将其包含到页面中。我想从调查中触发事件,因此当我进入调查页面时,LeadFacebook像素代码触发,当调查完成后,CompleteRegistrationFacebook像素代码触发。因此,我试图从
访问一些操作/事件

两个文档都在同一台服务器上,但它不工作

我试过这个:

$(document).ready(function() {
  $('#assessment').load(function(){
    var iframe = $('#assessment').contents();
    iframe.find("h1 .state__title").click(function() { 
      alert("test");
    });
  });
});
还包括:

var a = window.frames['assessment'].contentDocument.getElementsByClassName('h1').innerHTML;
alert(a);

欢迎任何帮助。提前感谢。

首先,在iframe中添加一个onload事件,此onload将触发一个具有两个目标的函数:

  • 向iframe发送消息,告知该iframe的内容已加载
  • 请求时将页面DOM发送到iframe
[父文件]

<iframe id="assessment" src="target.html" onload="check()">
    ...
</iframe>
window.onmessage = function(event) {
     check(event);
};
function check(event) {
    if(!event || !event.data){
        // if the iframe is loaded, then tell it so
        document.getElementById('assessment').contentWindow.postMessage('','*');
    }else{
        // if the Window received a message from the iframe, then send
        // the page dom to the iframe
        event.source.postMessage(document.body.innerHTML, event.origin);
    }
}
window.onmessage = function(event) {
    if(!event.data){
        // If the iframe was loaded, tell the parent to send
        // its dom
        window.parent.postMessage('get parent DOM',event.origin)
    }else{
        // If the parent sent its DOM, process it
        var dom = $('<div></div>').append(event.data);
        console.log(dom.html());
        ...
    }
};
以及功能:

[父文件]

<iframe id="assessment" src="target.html" onload="check()">
    ...
</iframe>
window.onmessage = function(event) {
     check(event);
};
function check(event) {
    if(!event || !event.data){
        // if the iframe is loaded, then tell it so
        document.getElementById('assessment').contentWindow.postMessage('','*');
    }else{
        // if the Window received a message from the iframe, then send
        // the page dom to the iframe
        event.source.postMessage(document.body.innerHTML, event.origin);
    }
}
window.onmessage = function(event) {
    if(!event.data){
        // If the iframe was loaded, tell the parent to send
        // its dom
        window.parent.postMessage('get parent DOM',event.origin)
    }else{
        // If the parent sent its DOM, process it
        var dom = $('<div></div>').append(event.data);
        console.log(dom.html());
        ...
    }
};
在iframe中,我们将
window.onmessage
链接到一个具有双重目标的函数:

  • 确认已加载iframe,因此从父级请求数据
  • 从父级接收dom
[子文件]

<iframe id="assessment" src="target.html" onload="check()">
    ...
</iframe>
window.onmessage = function(event) {
     check(event);
};
function check(event) {
    if(!event || !event.data){
        // if the iframe is loaded, then tell it so
        document.getElementById('assessment').contentWindow.postMessage('','*');
    }else{
        // if the Window received a message from the iframe, then send
        // the page dom to the iframe
        event.source.postMessage(document.body.innerHTML, event.origin);
    }
}
window.onmessage = function(event) {
    if(!event.data){
        // If the iframe was loaded, tell the parent to send
        // its dom
        window.parent.postMessage('get parent DOM',event.origin)
    }else{
        // If the parent sent its DOM, process it
        var dom = $('<div></div>').append(event.data);
        console.log(dom.html());
        ...
    }
};
window.onmessage=函数(事件){
如果(!event.data){
//如果已加载iframe,请告诉父级发送
//它的dom
window.parent.postMessage('get parent DOM',event.origin)
}否则{
//如果父级发送了其DOM,请对其进行处理
var dom=$('').append(event.data);
log(dom.html());
...
}
};

iframe是否与您的文档位于同一域中?由于同一来源策略,您只能从同一域访问iframe(不确定CORS是否有助于访问iframe)。@jcubic是的,iframe与您的文档位于同一域中。您的标题可能重复,这会产生误导,因为它看起来像是您要从iframe中访问父级,但从文本中可以清楚地看出,情况恰恰相反。@trincot我刚刚更新了问题的标题