访问iframe内容 - 代码在控制台中有效,但在页面加载时却无法

时间:2016-01-11 14:51:40

标签: javascript jquery html iframe

当我在控制台中运行我的代码时它工作正常,但是当我加载页面时它给我一个错误 - TypeError:undefined不是一个对象(评估' rowInfo.textContent')

我有两个网页,一个是父网站,另一个网页是孩子。它们都使用相同的协议和端口在同一本地服务器上。我有第三个文件,其中包含javascript。以下是相关代码:

父页面

<html>
    <head>
        <title>Broker's Lead List</title>

        <link rel="stylesheet" type="text/css" href="style.css"/>
        <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
        <script type="text/javascript" src="https://c1eru548.caspio.com/scripts/embed.js"></script>
    </head>
    <body>
        <div id="callback"></div>

        <script type="text/javascript" src="scripts.js"></script>
        <script type="text/javascript">
            autoRefresh_div();
            window.frames['DueDateCounter'].addEventListener("load", alert("loaded"));
            popUpWindow();
    </body>
</html>

Javascript代码

function autoRefresh_div() {
    $("#callback").empty()
                  .html('<iframe name="DueDateCounter" title="DueDateCounter" ' + 
                             'style="width: 1px; height: 1px" ' + 
                             'src="https://192.168.0.50/CRM/CalanderCountDown.html">Sorry, but// your browser does not support frames.//</iframe>'); 
}

var f, doc, rowInfo, minutesUntilCallBack, calenderItem, calenderItemId;

function popUpWindow() {
    f = $('iframe')[0];

    doc = f.contentDocument? f.contentDocument: f.contentWindow.document;
    rowInfo = doc.getElementsByTagName('td')[0];
    minutesUntilCallBack = rowInfo.textContent;

    calendarItem = f.contentDocument.getElementsByTagName('td')[1];
    calendarItemId = calendarItem.textContent;

    alert(minutesUntilCallBack);
    alert(calendarItemId);
}

页面加载后我转到控制台,我可以看到变量f已定义,但没有定义任何其他内容。现在,如果我使用控制台并将代码放入一切正常。 minutesUntilCallBack警告以及正确的calendarItemId

也是如此

我认为iframe没有正确加载可能是一个问题,所以我把一个监听事件放进去,我必须在运行查看之前的函数popUpWindow()之前确定iframe

我在许多网站上阅读过很多关于类似问题的帖子,但似乎无法得到正确答案。

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:0)

您需要将popUpWindow()函数放在iframe的onload事件侦听器中。它目前在iframe加载之前运行。 addEventListener是异步的。

window.frames['DueDateCounter'].addEventListener("load", function() { popUpWindow(); });