我希望这可以帮助你,它只适用于同一域 iframe 内容,新属性沙箱将扩展可能性,但目前仅由 Chrome 实现。
1)检测IF何时加载
myIF.addEventListener("load",ifOnLoad,true);
2)每次加载 iframe 时,获取 IF Window 的引用并为 onBeforeUnload 事件注册一个侦听器。
ifContentWindow = myIF.contentWindow;
ifContentWindow.addEventListener("beforeunload", ifOnUnload,false);
3)当你的handler(ifOnUnload) 将被调用是为了提前获取ifContentWindow.location,然后设置一个延迟来读取它。
setTimeout(delayedIFUnload, 100);
4)在delayedIFUnload 函数中获取if 位置并重定向您的主页。
window.location = ifContentWindow.location;
我只在我的环境(MAC、Chrome)中测试代码,您需要做一些工作来调整其他浏览器的代码。例如使用 addEventListener 或 contentWindow。
这是工作代码http://pannonicaquartet.com/test/testif.html的链接,我尝试在小提琴中进行,但小提琴有很多框架,并且其中的代码无法正常工作。我对消息使用跨度,因为在这种类型的操作中,警报被阻止,至少在 Chrome 中是这样。
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script language="javascript" type="text/javascript">
var myIF, spNotify, ifContentWindow;
function init(){
myIF = document.getElementById("myIF");
spNotify = document.getElementById("spNotify");
myIF.src="testIF_1.html";
myIF.addEventListener("load",ifOnLoad,true);
}
function ifOnLoad(){
try{
ifContentWindow = myIF.contentWindow;
ifContentWindow.addEventListener("beforeunload", ifOnUnload,false);
}catch(er){
alert(er);
}
}
function ifOnUnload(){
try{
notify(ifContentWindow.location);
setTimeout(delayedIFUnload, 100);
}catch(er){
alert(er);
}
}
function delayedIFUnload(){
try{
notify(ifContentWindow.location);
}catch(er){
alert(er);
}
}
function notify(what){
spNotify.innerText = what;
}
</script>
</head>
<body onload="init();">
<div id="dvMsg">Target: <span id = "spNotify"></span></div>
<iframe id="myIF" src=" " style="width:1100px;height:700px;" />
</body>
新年快乐!!!
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script language="javascript" type="text/javascript">
var myIF, spNotify, ifContentWindow, lastURL, timerRef;
function init(){
myIF = document.getElementById("myIF");
spNotify = document.getElementById("spNotify");
myIF.src="testIF_1.html";
myIF.addEventListener("load",ifOnLoad,true);
}
function ifOnLoad(){
try{
ifContentWindow = myIF.contentWindow;
ifContentWindow.addEventListener("beforeunload", ifOnUnload,false);
}catch(er){
alert(er);
}
}
function ifOnUnload(){
try{
notify(ifContentWindow.location);
lastURL = ifContentWindow.location;
timerRef = setInterval(delayedIFUnload, 5);
}catch(er){
alert(er);
}
}
function delayedIFUnload(){
try{
if(lastURL != ifContentWindow.location){
notify(ifContentWindow.location);
clearInterval(timerRef);
}
}catch(er){
alert(er);
}
}
function notify(what){
spNotify.innerText = what;
}
</script>
</head>