在我的网站中,我在iframeB中使用iframeA,并且当iframeA更改其内容时,我必须设置src。我只能使用onload事件设置它,但是在加载站点时会调用它。我正在寻找一些事件或触发器,这有助于我在开始加载之前检测位置/ src更改。在src设置之前,我不想等待整个页面加载。我没有直接访问iframeA(只是下面的脚本)
一些代码:
var myframe = document.getElementById('frameB').contentWindow.document.getElementById('frameA');
myframe.onload=function (funcname) {...};
答案 0 :(得分:1)
什么会改变iframe的来源?如果您有权访问该代码,那么您可以执行onload
函数中的任何操作。
如果某个链接的target
属性设置为iframe,那就是来源的变化方式,那么您可以点击链接点击次数:
$('a[target="frameB"]').bind('click', function () {
//run your onload code here, it will run as the iframe is downloading the new content
});
另外,只需注意,您可以在jQuery中绑定load
事件的事件处理程序,如下所示:
$('#frameB').bind('load', function () {
//run onload code here
});
网站 - > frameB - > frameA
$("#frameB").contents().find("#frameA").bind('load', function () {
//load code here
});
这将选择#frameB
元素(位于当前顶级DOM中),获取其内容,找到#frameA
元素,然后绑定load
事件的事件处理程序
请注意,必须在#frameB
加载其DOM中已存在的#frameA
元素后运行此代码。这样的事情可能是一个好主意:
$('#frameB').bind('load', function () {
$(this).contents().find('#frameA').bind('load', function () {
//run load code here
});
});
到#frameB
元素中的hi-jack链接:
$('#frameB').contents().find('a[target="frameA"]').bind('click', function () {
/*run your code here*/
});
这会在#frameB
元素中找到target
属性设置为frameA
并添加click
事件处理程序的任何链接。
同样,这仅在#frameB
iframe元素已加载(或至少获得document.ready
事件)时才有效,因此您可以选择它的元素。
答案 1 :(得分:1)
您还可以尝试采用检测iframe何时离开其当前位置的方法。这在某些情况下可能很有用。为此,请将以下代码放入iFarme源代码中。
$(窗口).on(' beforeunload',function(){
提醒('加载之前......');
});
答案 2 :(得分:1)
将此gist或我的answer检查到此question。那里的代码完全是这样的:
function iframeURLChange(iframe, callback) {
var unloadHandler = function () {
// Timeout needed because the URL changes immediately after
// the `unload` event is dispatched.
setTimeout(function () {
callback(iframe.contentWindow.location.href);
}, 0);
};
function attachUnload() {
// Remove the unloadHandler in case it was already attached.
// Otherwise, the change will be dispatched twice.
iframe.contentWindow.removeEventListener("unload", unloadHandler);
iframe.contentWindow.addEventListener("unload", unloadHandler);
}
iframe.addEventListener("load", attachUnload);
attachUnload();
}
它利用unload
事件。每当卸载一个页面时,一个新页面都应该启动加载。但是,如果您收听该事件,则会获得当前的URL,而不是新的URL。通过添加0毫秒延迟的超时,然后然后检查URL,您将获得新的iframe URL。
但是,每次加载新页面时都会删除unload
侦听器,因此必须在每个load
上重新添加它。
但该功能可以解决所有这些问题。要使用它,您只需要:
iframeURLChange(document.getElementById("myframe"), function (url) {
console.log("URL changed:", url);
});
答案 3 :(得分:0)
我认为使用适当的事件处理程序向onload
标记添加内联iframe
属性可以解决您的问题。
function onIframeLoad(){
//Write your code here
}
标记更改
<iframe src='..' onload='onIframeLoad()' />