0

我想在渲染 index.html 之后立即从 index.html 调用在 iframe(iframe.html) 中定义的方法“getData()”。下面是我的片段。在这种情况下,Chrome 会检测到错误“Uncaught TypeError: Object [object global] has no method 'getData'”。Chrome 目前似乎在 iframe 中看不到“getData()”方法。另一方面,在 Chrome 控制台上,我可以调用 getData() 并获取返回的数据。

有没有一种好方法可以在渲染后立即调用并获取数据?任何提示、帮助或解决方案将不胜感激!

  • index.html 如下。

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <title>index.html</title>
    <script src='//code.jquery.com/jquery-2.0.2.min.js'></script>
  </head>

  <body>
    <p>The following content is generated by iframe.</p>

    <iframe src="iframe.html" id="myIframe"></iframe>

    <script>
      function getData() {
        return document.getElementById('myIframe').contentWindow.getData();
      };

      $(function() {
        return document.getElementById('myIframe').contentWindow.getData();
      });
    </script>
  </body>
</html>

  • iframe.html 如下。

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <script src='//code.jquery.com/jquery-2.0.2.min.js'></script>
  </head>

  <body bgcolor="#FFFF00">
    <p>I am in iframe.</p>
    <script>
      var data = {"result": true ,"data": [{"1": true}, {"2": false}]};

      function getData(){
        return data;
      }
    </script>
  </body>
</html>

  • Chrome 中的控制台错误消息

Uncaught TypeError: Object [object global] has no method 'getData'

4

1 回答 1

1

您需要等待 iframe 正在加载:

$('#myIframe').on('load', function () {
    console.log(this.contentWindow.getData());
});
于 2013-10-26T20:45:24.157 回答