有没有一种方法来检测的iframe会onload事件之前被重定向到src?(Is there a w

2019-08-05 03:55发布

我有一个iframe,我没有它的内容的控制。 在iframe里面会有重定向,而不是在顶部窗口重定向(我希望),重定向总是发生在iFrame中。 我尝试了这里的解决方案: 如何获得重定向URL onload事件发生,如果对重定向没有控制过吗? 但结果并不理想。

现在的iframe页面内我想用$(window).unload()和手动更改top.window.location.href强制重定向在上面的窗口。 因此,没有人知道如何检测地址,点击之后和之前被重定向到onload重定向的页面? 谢谢!

PS:重定向的页面是同一个域的。

Answer 1:

我霍普这可以帮助你,它只能在同一个域中的iframe中的内容工作,新的属性沙盒将延长的可能性,但现在仅是由Chrome中实现。

1)检测当IF是加载

myIF.addEventListener("load",ifOnLoad,true);

2)获取一个裁判IF窗口,并且每个的IFRAME被加载时注册一个侦听onbeforeunload事件。

ifContentWindow = myIF.contentWindow;
ifContentWindow.addEventListener("beforeunload", ifOnUnload,false);

3)当你处理(ifOnUnload)将被称为是早得到ifContentWindow.location,然后设置一个延迟读取它。

setTimeout(delayedIFUnload, 100);

4)在delayedIFUnload功能得到,如果位置和重定向您的主页。

window.location = ifContentWindow.location;

我只在我的环境(MAC,铬),你需要做的做一些工作调整为其他浏览器的代码测试代码。 例如具有的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>


文章来源: Is there a way to detect the src the iframe is going to be redirected to before onload?