1

我有一個自定義函數,它將從另一個URL打開一個窗口到屏幕中心。在我目前的情況下,我在我的域名之外打開一個網址。這是我的功能。javascript訪問在窗口上被拒絕來自不同域的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

+0

我想這是通過交叉域IE7阻止腳本的安全問題或檢查它不會被阻止的彈出窗口。 – 2011-02-06 16:44:46

+0

@Martin--彈出窗口按預期打開,但我在行`win.resizeTo(w,h);` – 2011-02-06 17:13:48

回答

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到您的網址解決這個問題。試試這個:

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