覆盖子窗口中的javascript函数

Overwrite function javascript in child window?

本文关键字:javascript 函数 盖子 窗口 覆盖      更新时间:2023-09-26

我打开一个窗口: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);我可以覆盖这个功能在父窗口?或者从父窗口绑定单击事件到子窗口中的元素(因为我不能编辑子页面)。

我是这样做的:

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'); } );