1

完成编辑

所以我创建了一个 iframe,它应该在函数运行后继续重新加载。该函数读取 iframe 中的信息。目前我有这样的东西(有效);

function loaded(){
    alert(iframe.contentDocument.getElementsByClassName("blah")[0].innerHTML);
    iframe.src = filePath; //reloads the iframe
}

iframe.onload = loaded;

作为替代方案,像这样的工作是否会在 iframe 加载 DOM 后立即运行该函数?

function loaded(){
    alert(iframe.contentDocument.getElementsByClassName("blah")[0].innerHTML);
    iframe.src = filePath; //reloads the iframe
}

iframe.addEventListener("DOMContentLoaded", loaded, false);
4

2 回答 2

1

如果我理解正确(iframe 位于同一个域中并且您可以编辑其内容),您可以将其添加到您的 iframe 中:

<script type="text/javascript">
//<![CDATA[
   fireOnReadyEvent();
   parent.loaded();
//]]>
</script>

一旦 iframe 准备好,这将调用父页面中的加载函数。您可以iframe.onload = loaded;从父页面中删除。

于 2013-06-06T19:46:37.643 回答
0

我相信您需要的是一个 DomContentLoaded 事件(请查看您的 chrome 开发工具以获取蓝线 :))

你可以像这样收听这个事件

window.addEventListener('DOMContentLoaded', loaded, false);

但不清楚您是要从框架内部还是外部访问框架窗口对象......如果从外部......您需要window.frames['SOME_FRAME_ID']document.getElementById('SOME_FRAME_ID').contentWindow让 Firefox 访问框架窗口对象。

对于 IE 使用后备

window.attachEvent('onload', loaded);

并记住在使用框架时 - 会出现可怕的错误

编辑更新

假设你有一个框架

<iframe src="" id="myFavouriteFrame" ...>

这里有一些代码

var iframeId = 'myFavouriteFrame';
var iframeWindow = null;

if(window.all && !window.opera) {
    iframeWindow = window.frames[iframeId];
}
else {
    iframeWindow = document.getElementById(iframeId).contentWindow; //Note - not standard
}

if(iframeWindow && iframeWindow.addEventListener) {
    iframeWindow.addEventListener('DOMContentLoaded', load, false);
}
else if (iframeWindow && iframeWindow.attachEvent){
    iframeWindow.attachEvent('onload', load);
}
于 2013-06-06T19:52:14.873 回答