如何听取`iframe`内容的变化?

时间:2016-09-27 05:14:38

标签: javascript jquery html iframe

angularjs个应用程序,我正在使用它。在我的网页中,我正在iframe中加载应用程序 - 我只是想知道ifame是否已加载。为此,我使用:

//但我不喜欢这个。

 var myTimeout = function () {
         setTimeout(function(){
             if($('.ssueContentIframe').length > 0 ) {
                  penetrate();
                  return;
             }
             myTimeout();
         }, 10000);
     };

    myTimeout();
iframe中的

内容有多少内容不断加载和更改。但是我需要在类名为.ui-grid-icon-ok的元素中添加一个事件 - 我如何从document听到element existence - 任何人帮助我?

1 个答案:

答案 0 :(得分:1)

如果没有CORS或XSS约束,您应该可以执行以下操作。

var what = document.getElementById('what');

function checkIframeLoaded() {
  try {
    // Get a handle to the iframe element
    var iframe = document.getElementById('iframe');
    var iframeDoc = iframe.contentDocument || iframe.contentWindow.document;

    what.appendChild(document.createTextNode("Checking...\n"));

    // Check if loading is complete
    if (iframeDoc.readyState == 'complete') {
      afterLoading();
      return;
    }
  } catch (err) {
    alert(err);
  }
  // If we are here, it is not loaded. Set things up so we check   the status again in 100 milliseconds
  window.setTimeout(checkIframeLoaded, 100);
}

function afterLoading() {
  what.appendChild(document.createTextNode("It loaded!\n"));
}

checkIframeLoaded();
iframe {
  width: 100px;
  height: 25px;
}
<iframe id="iframe" src="data:text/plain,"></iframe>
<pre id="what">Not loaded.</pre>

如果存在任何约束(例如沙盒,CORS,XSS等),您每隔10分钟就会收到一个警告对话框,并且我希望您能够单击复选框忽略它们。 :)

注意:这是this other stack overflow answer的修改版本,已展开以展示错误。