在子窗口中覆盖函数javascript?

时间:2015-10-10 08:18:00

标签: javascript jquery

我打开一个窗口: var popup =window.open(url,'Image', 'directories=no,height=640,location=no,menubar=no,resizable=yes,scrollbars=yes,status=no,toolbar=no,width=680');

打开的子窗口中的

具有OpenFile(url)功能; 我可以在父窗口中覆盖此功能吗?或者从父窗口将click事件绑定到子窗口中的元素(因为我无法编辑子页面)。 同一域中的父窗口和子窗口。

1 个答案:

答案 0 :(得分:0)

以下是我如何做到的:

var popup =window.open(url,'Image', 'directories=no,height=640,location=no,menubar=no,resizable=yes,scrollbars=yes,status=no,toolbar=no')

function waitOnloadWindow(){
    var body = popup.document.getElementsByTagName("body");
    // Not loaded yet
    if(!body[0] || !popup.OpenFile){
        setTimeout(waitOnloadWindow, 50);
    }else{
        // Replace child window function here
        popup.OpenFile = function(url){ alert('replaced');}
    }
}
waitOnloadWindow();

更通用的方法(如果要替换多个函数):

function replaceWindowFunction(win, fnName, fnFunction) {
    var body = popup.document.getElementsByTagName("body");

    if(!body[0] || !popup[fnName]){ // Wait for loading
        setTimeout(function() {
            replaceWindowFunction(win, fnName, fnFunction);
        }, 50);
    }else{
        // Replace child window function here
        popup[fnName] = fnFunction;
    }
}

// Usage:
var popup = window.open("test.html",'Image', 'directories=no,height=640,location=no,menubar=no,resizable=yes,scrollbars=yes,status=no,toolbar=no')
replaceWindowFunction(popup, 'OpenFile', function() { alert('replaced'); } );