覆盖IFrame中的window.open

时间:2012-07-29 02:31:55

标签: javascript html iframe override

我正在使用包含不同域(我无法控制)的远程页面的IFrame,它有时会尝试使用window.open弹出一个窗口。

不是弹出窗口 - 我想动态地将另一个IFrame添加到页面,其中包含第一个IFrame尝试打开的网址。

有没有办法覆盖IFrame的window.open所以我能够'抓住'它试图弹出的网址?

我试过了:

var myFrame = document.getElementById("ifrm"); // 'ifrm' is the iframe's ID
myFrame.contentWindow.open = function (url, name, features) { 
    alert(url);
};

但它不起作用(没有警报,iframe仍试图弹出新窗口)......

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

尝试:

function bindings(newDoc){
    try
    {   
        newDoc.contentWindow.window.open = function (url, name, features,
                                                     replace) { 
            alert(url);
        };
    }
    catch( e )
    {
        console.log(e.message);
    }
}          

在调用iFrame时,请使用onload事件:

<iframe onload="bindings(this)" ... />

它抛出错误:

  

在Firefox中访问“open”属性的权限被拒绝

     Internet Explorer中

日志:权限被拒绝

显然 Dan F 是对的.. UA将拒绝访问通过iframe加载的远程(跨域)文档。