我有一个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似乎没问题。
我不知道为什么发生这种刷新和解决这个问题的任何帮助将不胜感激。
保罗
你如何显示数据? – Raidri
你可以console.log发生错误时的目标[0] .contentWindow.document.readyState的值 –
我也认为这是一个时间问题,因为父窗口开始做的东西,而子窗口仍然是loadng。也许你可以反转逻辑并让子窗口在加载后从它的主机请求数据。 – thmshd