Override window.open()

Override window.open()

本文关键字:open window Override      更新时间:2023-09-26

我试图覆盖window.open(),所以我试图找到一种在没有window.open()的新窗口中打开链接的方法。

详细地说,我处于这样的情况:我有一个Silverlight Web部件,它使用HTMLWindow.Navigate()在新窗口中打开超链接,所以我不能使用<a>,因为我完全无法控制Web部件。唯一的方法是重写window.open()

例如,当我想在顶部窗口打开链接时,我像这样重写window.open():

window.open = function (open) {
    return function (url, name, features) {
            window.top.location = url;    
            return false;
       };
    }(window.open);

是否有类似的方法打开链接在新的窗口?非常感谢!

PS:我不能在这里使用锚,因为我重写了window.open()

对于这个问题我最后做了什么:

首先,我复制了window.open()

var _open = window.open;

然后我重写window.open()函数。例如,假设"target"是一个接收querystring的变量。请注意,默认行为是在当前窗口中打开链接。

if (target == "top")
    {
        window.open = function (open) {
            return function (url, name, features) {
                window.top.location = url;
                return false;
           };
        }(window.open);
    }
else if (target == "blank")
{
    window.open = function (open) {
            return function (url, name, features) {
                return open_(url, '_blank', features);
           };
        }(window.open);
}

从javascript单独你不能打开一个新的窗口没有使用window.open()。此外,您无法影响窗口在新浏览器中的打开方式。这取决于浏览器的设置,是打开一个新选项卡还是一个新窗口。

您可以通过在a -元素上定义<a target="_blank" href="..."></a>来声明您想要一个新窗口,但是随后用户必须单击它。否则,如果你用javascript触发点击,你会遇到浏览器的弹出窗口拦截器。