javascript - 如何覆盖 window.open 功能?

标签 javascript html

假设我有 window.open(没有名称参数),分散在我的项目中,我想更改实现,以便在未指定名称的任何地方指定一个默认名称。

我想做的是将我自己的方法挂接到 window.open 上,这样每当 window.open 运行时,它都会在内部调用我自己的方法,然后调用 window.open(使用 name 参数)。

这可以通过 Javascript 实现吗?这是否会存在任何循环依赖问题,即 window.open 调用我的自定义函数,而后者又再次调用 window.open 函数?

附言简单来说,我想做的是覆盖 window.open 功能。

最佳答案

为避免循环调用,您需要将原始的 window.open 函数隐藏在一个变量中。

一个不错的方法(不会污染全局命名空间)是使用闭包。将原始 window.open 函数作为参数传递给匿名函数(下面称为 open)。这个匿名函数是你的钩子(Hook)函数的工厂。您的钩子(Hook)函数通过 open 参数永久绑定(bind)到原始 window.open 函数:

window.open = function (open) {
    return function (url, name, features) {
        // set name if missing here
        name = name || "default_window_name";
        return open.call(window, url, name, features);
    };
}(window.open);

关于javascript - 如何覆盖 window.open 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9172505/

相关文章:

javascript - 将别名与多个过滤器一起使用

javascript - 使用 AJAX 发送数据但 PHP 输出 undefined_index

javascript - 显示/隐藏脚本无法在第二次单击时再次隐藏

javascript - TH 中的自定义悬停

javascript - 单击按钮时淡入

javascript - 直接在组件标签中编辑子组件的 props 值

php 的 "setcookie"无法跨浏览器工作?

javascript - 在悬停时删除图像覆盖

javascript - 如何让 Chrome 在新标签页中打开多个站点

html - <g:form>在firefox中渲染时缺少grails