【问题标题】:javascript access is denied on window resize of url from different domainjavascript 访问在来自不同域的 url 的窗口调整大小时被拒绝
【发布时间】:2023-09-30 13:47:02
【问题描述】:

我有一个自定义函数,可以从不同的 url 打开一个到屏幕中心的窗口。在我目前的情况下,我正在我的域之外打开一个 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 上不行

【问题讨论】:

  • 我猜这是 IE7 的一个安全问题,它阻止了跨域编写脚本,或者检查它是否没有作为弹出窗口被阻止。
  • @Martin - 弹出窗口按预期打开,但我在win.resizeTo(w,h); 行收到 IE javascript 调试器错误
  • 你检查过这个答案(也许对你有帮助):*.com/questions/60030/…

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


【解决方案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);

我不知道这是否是 hack;我很惊讶它很容易解决,至少对于改变窗口大小等等。但是,它可以工作(至少在 IE8 上)。

【讨论】:

  • 没问题。 :) 我真的很惊讶在这种情况下绕过 IE 的安全架构如此容易,尽管我不确定这是否是他们将来可能会插入的安全问题。
【解决方案2】:

浏览器和操作系统检查任何窗口的许多安全事项。

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

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

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

【讨论】: