Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 覆盖window.open()_Javascript_Overriding_Window.open - Fatal编程技术网

Javascript 覆盖window.open()

Javascript 覆盖window.open(),javascript,overriding,window.open,Javascript,Overriding,Window.open,我试图覆盖window.open(),因此我试图找到一种方法,在新窗口中打开链接而不使用window.open() 具体来说,我遇到了这样的情况:我有一个Silverlight Web部件,它使用HTMLWindow.Navigate()在新窗口中打开超链接,因此我无法使用,因为我完全无法控制Web部件。唯一的方法是重写window.open() 例如,当我想在顶部窗口中打开链接时,我会覆盖window.open(),如下所示: window.open = function (open) {

我试图覆盖
window.open()
,因此我试图找到一种方法,在新窗口中打开链接而不使用
window.open()

具体来说,我遇到了这样的情况:我有一个Silverlight Web部件,它使用
HTMLWindow.Navigate()
在新窗口中打开超链接,因此我无法使用
,因为我完全无法控制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()

然后重写
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);
}

如果不使用
window.open()
,单从javascript就无法打开新窗口。此外,您对在新浏览器中如何打开窗口没有任何影响。这取决于浏览器设置,它是打开新选项卡还是打开新窗口


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

谢谢@Christoph,我想我不能使用
,因为我无法控制内容。你能告诉我更多关于使用javascript触发点击的信息吗?你确定它会被弹出窗口拦截器阻止吗?谢谢您可以在anchor元素上调用
click()
,但浏览器认为这可能是有害的,因为这是向用户发送广告的常见方式。您是正确的。在重写之前,我最终复制了window.open(),然后我使用复制的window.open在新窗口中打开链接。我想他是想写
return\u open(url,'.\u blank',feature)在else部分中
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);
}