2015-11-05 54 views
0

我有一个HTML页面,Home.htm,包含持有另一页Child.htm一个iframe,即jQuery.trigger()不是射击刷新

<body> 
    <div> 
     <iframe id="child-iframe" src="Child.htm"></iframe> 
    </div> 
</body> 

Home.htm还包含一些javascript/jQuery检索数据,并根据该数据检索更多的信息,然后触发在Child.htm文件是否设置为内Child.htm显示此信息的事件,即

<script> 
    $(document).ready(function() { 
     $.getJSON("http://getsummarydata/001") 
     .done(function (data) { 
      if (data meets some condition) { 
       $.getJSON("http://getspecificdata/001") 
        .done(function (data) { 
         // Trigger the event 
         var target = $("#child-iframe"); 
         if (target[0] !== undefined) {     
          target[0].contentWindow.$(target[0].contentWindow.document).trigger("data-available", [data]); 
         } 
       }); 
      }     
     } 
    }); 
</script> 

Child.htm我已经使用jQuery设置了自定义事件data-available及其处理程序,如下所示;

<script> 

    // Event handler 
    function myFunc(data) { 
     // Display the data 
    } 

    // Event 
    $(document).on('data-available', function (__e, __data) { 
     myFunc(__data); 
    }); 

</script> 

Home.htm页第一次加载的数据被成功地检索到,则触发事件和iframe中如预期的那样显示的数据。但是,当我刷新Home.htm(F5)时,数据仍然被回收,但触发器不再被触发 - 事实上,我得到以下错误。

Uncaught TypeError: target[0].contentWindow.$ is not a function 

即使目标[0] .contentWindow似乎没问题。

我不知道为什么发生这种刷新和解决这个问题的任何帮助将不胜感激。

保罗

+0

你如何显示数据? – Raidri

+0

你可以console.log发生错误时的目标[0] .contentWindow.document.readyState的值 –

+0

我也认为这是一个时间问题,因为父窗口开始做的东西,而子窗口仍然是loadng。也许你可以反转逻辑并让子窗口在加载后从它的主机请求数据。 – thmshd

回答

1

这听起来像你的事件被解雇的iframe已经完全加载之前。这可以解释为什么当它需要时找不到$,但是当你检查它时,它就在那里。一个潜在的原因可能是您的数据请求被缓存,因此几乎立即返回。

+0

谢谢,这正是发生了什么事情。 – PaulN