如何在完成所有 jquery ajax 请求后调整 iframe 的大小
How to resize an iframe after all jquery ajax requests are done
我有一个 html 文档,里面有一个 iframe。父文档和 iframe(一个 wordpress 博客)中的文档在同一个域中。 iframe 在加载事件时自动调整其高度以适应其内容,如下所示:
<iframe width="100%" height="100%" id="parent-iframe" name="parent-iframe" src="/blog" scrolling="no" onload="this.height=this.contentWindow.document.body.scrollHeight"></iframe>
它工作正常。但是现在,这个博客主要是一个带有 facebook feed 的页面,已经更新了一个 "load-more" 按钮来限制 post 显示的数量。很像无限滚动,但有一个按钮。
我想要的是能够在 "load-more" 按钮单击时调整父 iframe 的大小。由于 facebook 提要是由 wordpress 插件提供的,并且它时不时地更新,我不想直接弄乱它的文件。 javascript 代码也被缩小了,所以我觉得它很乱。
幸运的是,它还提供了一个后台文本框来包含自定义代码。由于 jQuery 已经加载,我试过这个:
jQuery(document).ready(function () {
jQuery("load-more").click(function () {
var frame = $('#parent-iframe', window.parent.document);
var height = jQuery('body').height();
frame.height(height);
});
});
它按预期工作,但有一个警告。每当触发点击事件时,函数都会在新的 post 加载之前执行,因此 body 高度总是落后一步。我可以添加固定数量的像素
以补偿,但有些 post 比其他的大得多。
我不经常做这种工作,所以我需要帮助。我正在查看 jQuery 延迟对象,但老实说我有点迷路了。有人可以简单地向我解释一下它是如何工作的以及如何修复它吗?
感谢 @jfriend00 的建议,我想我已经找到了一个可行的解决方案。
由于插件 javascript 文件被缩小并且我不习惯 javascript 调试,所以我找不到 load-more
ajax 调用的结尾。
然后我需要做的就是等到所有 ajax 请求都完成。所以我找到了这个 post jquery.ajaxStop() 并尝试了这个:
jQuery(document).ready(function () {
jQuery("load-more").click(function () {
$(document).ajaxStop(function () {
var frame = $('#parent-iframe', window.parent.document);
var height = jQuery('body').height();
frame.height(height);
$(document).unbind("ajaxStop");
});
});
});
现在可以了。如果我无法更好地解释自己,请原谅。正如我所说,我不习惯这个,所以我缺乏适当的术语和概念。如果您对 post 标题、详细信息或标签有任何建议以使其对其他人有用,我很乐意相应地对其进行编辑。
它也可以像这样工作并且看起来更干净:
<iframe width="100%" height="100%" id="parent-iframe" name="parent-iframe" src="/blog" scrolling="no" onload="this.height=this.contentWindow.document.body.scrollHeight" onresize="this.height=this.contentWindow.document.body.scrollHeight"></iframe>
parent iframe
$(document).ready(function () {
$("#load-more").click(function () {
$(document).one("ajaxStop", function () {
window.parent.$("#parent-iframe").trigger('resize');
});
});
});
child 文件 jquery
我有一个 html 文档,里面有一个 iframe。父文档和 iframe(一个 wordpress 博客)中的文档在同一个域中。 iframe 在加载事件时自动调整其高度以适应其内容,如下所示:
<iframe width="100%" height="100%" id="parent-iframe" name="parent-iframe" src="/blog" scrolling="no" onload="this.height=this.contentWindow.document.body.scrollHeight"></iframe>
它工作正常。但是现在,这个博客主要是一个带有 facebook feed 的页面,已经更新了一个 "load-more" 按钮来限制 post 显示的数量。很像无限滚动,但有一个按钮。
我想要的是能够在 "load-more" 按钮单击时调整父 iframe 的大小。由于 facebook 提要是由 wordpress 插件提供的,并且它时不时地更新,我不想直接弄乱它的文件。 javascript 代码也被缩小了,所以我觉得它很乱。
幸运的是,它还提供了一个后台文本框来包含自定义代码。由于 jQuery 已经加载,我试过这个:
jQuery(document).ready(function () {
jQuery("load-more").click(function () {
var frame = $('#parent-iframe', window.parent.document);
var height = jQuery('body').height();
frame.height(height);
});
});
它按预期工作,但有一个警告。每当触发点击事件时,函数都会在新的 post 加载之前执行,因此 body 高度总是落后一步。我可以添加固定数量的像素 以补偿,但有些 post 比其他的大得多。
我不经常做这种工作,所以我需要帮助。我正在查看 jQuery 延迟对象,但老实说我有点迷路了。有人可以简单地向我解释一下它是如何工作的以及如何修复它吗?
感谢 @jfriend00 的建议,我想我已经找到了一个可行的解决方案。
由于插件 javascript 文件被缩小并且我不习惯 javascript 调试,所以我找不到 load-more
ajax 调用的结尾。
然后我需要做的就是等到所有 ajax 请求都完成。所以我找到了这个 post jquery.ajaxStop() 并尝试了这个:
jQuery(document).ready(function () {
jQuery("load-more").click(function () {
$(document).ajaxStop(function () {
var frame = $('#parent-iframe', window.parent.document);
var height = jQuery('body').height();
frame.height(height);
$(document).unbind("ajaxStop");
});
});
});
现在可以了。如果我无法更好地解释自己,请原谅。正如我所说,我不习惯这个,所以我缺乏适当的术语和概念。如果您对 post 标题、详细信息或标签有任何建议以使其对其他人有用,我很乐意相应地对其进行编辑。
它也可以像这样工作并且看起来更干净:
<iframe width="100%" height="100%" id="parent-iframe" name="parent-iframe" src="/blog" scrolling="no" onload="this.height=this.contentWindow.document.body.scrollHeight" onresize="this.height=this.contentWindow.document.body.scrollHeight"></iframe>
parent iframe
$(document).ready(function () {
$("#load-more").click(function () {
$(document).one("ajaxStop", function () {
window.parent.$("#parent-iframe").trigger('resize');
});
});
});
child 文件 jquery