来自不同域的URL调整窗口大小的javascript访问被拒绝

时间:2011-02-06 16:38:14

标签: javascript internet-explorer-7 internet-explorer-6 access-denied window-resize

我有一个自定义功能,可以从不同的URL打开一个窗口中心的窗口。在我目前的情况下,我在我的域名之外打开一个网址。这是我的功能。

function wopen(url, name, w, h) {
    w += 32;
    h += 96;
    wleft = (screen.width - w) / 2;
    wtop = (screen.height - h) / 2;
    if (wleft < 0) {
        w = screen.width;
        wleft = 0;
    }
    if (wtop < 0) {
        h = screen.height;
        wtop = 0;
    }
    var win = window.open(url,
                name,
                'width=' + w + ', height=' + h + ', ' +
                'left=' + wleft + ', top=' + wtop + ', ' +
                'location=no, menubar=no, scrollbars=yes');
    // +
    //'status=no, toolbar=no, scrollbars=no, resizable=yes');
    win.resizeTo(w, h);
    win.moveTo(wleft, wtop);
    win.focus();
}

这适用于IE6和FF,但不适用于IE7

2 个答案:

答案 0 :(得分:1)

问题是您正在尝试打开一个具有单独域的窗口,在IE7及更高版本中该域被视为安全问题。基本上,当您打开新窗口时,它会创建一个新进程并使您的进程分离,因此您无法再操纵该其他窗口。

http://social.msdn.microsoft.com/Forums/en/iewebdevelopment/thread/e9cebb92-f943-4a79-b29b-7376039ea6a0

http://msdn.microsoft.com/en-us/library/Bb250462.aspx

因此,一旦您打开一个与您自己的域名不同的新窗口,您就会失去对它的控制权。如果不调整最终用户计算机,我看不到改变这种情况的方法。

修改

嗯,显然你可以通过打开一个你可以控制的窗口来解决这个问题,然后将window.location.href更改为你的url。试试这个:

function wopen(url, name, w, h) {
    w += 32;
    h += 96;
    wleft = (screen.width - w) / 2;
    wtop = (screen.height - h) / 2;
    if (wleft < 0) {
        w = screen.width;
        wleft = 0;
    }
    if (wtop < 0) {
        h = screen.height;
        wtop = 0;
    }
    var win = window.open('about:blank', // <- Note about:blank
                name,
                'width=' + w + ', height=' + h + ', ' +
                'left=' + wleft + ', top=' + wtop + ', ' +
                'location=no, menubar=no, scrollbars=yes');
    // +
    //'status=no, toolbar=no, scrollbars=no, resizable=yes');
    win.location.href = url;
    win.resizeTo(800, 150);
    win.moveTo(wleft, wtop);
    win.focus();
}
wopen('http://www.yahoo.com/', 'yahoo', 250, 250);

我不知道这是不是黑客攻击;我很惊讶它很容易绕过,至少对于改变窗口调整大小等等。但是,它起作用(至少在IE8上)。

答案 1 :(得分:1)

浏览器和操作系统检查任何窗口都有很多安全问题。

对于这种情况,我不确定,但也尝试这个。 如果单击鼠标按钮并在通过js代码调整浏览器窗口大小时按住,则会出现访问被拒绝错误。

原因是当真实物理用户准备好进行鼠标拖动事件时,操作系统会拒绝此类活动。

见下面的网址 http://prcoldfusion.blogspot.com/2012/06/access-denied-javascript-error-internet.html