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

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

我有一个自定义函数,可以从不同的 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 和更高版本中被视为安全问题。从本质上讲,当您打开那个新窗口时,它会创建一个新进程并将您的进程分开,因此您无法再操作其他窗口。

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 上)。

关于来自不同域的 url 的窗口调整大小时,javascript 访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4914610/

相关文章:

javascript - readyState 与 status==200

javascript - Three.js 因数千个对象而缓慢

Chrome、FF、IE 高度滚动上的 Javascript 事件(添加样式)

html - IE7 错误 - float : left child of float: right parent

html - float :left; problem in ie6?

jQuery/underscore.js 模板 - 与 IE 6+ 兼容吗?

php - AJAX 和 PHP - 检索多个值

html - IE8的圆 Angular 按钮

html - 下拉菜单在 ie7 或 ie8 中无法正常显示

jquery - 如何扩展 float 的div以占用动态删除的div留下的空间?