現代瀏覽器普遍禁止 JS 控制主窗口尺寸/位置(安全策略)。window.resizeTo、moveTo 僅對 window.open 打開的**無標籤頁彈出窗口**生效,且受瀏覽器策略限制(Chrome 40+、Firefox 3+、Edge 均默認禁用)。
// 僅在彈出窗口中有效
var myWin = window.open('', '_self', 'width=400, height=250'); // _self 覆蓋當前頁,非彈出窗
myWin.resizeTo(500, 400); // 主窗口無效
// 正確彈出窗口用法(仍可能被攔截)
var popup = window.open('page.html', 'popupName', 'width=400,height=300,left=100,top=100');
if (popup) {
popup.resizeTo(500, 400); // 僅在用戶允許彈出窗且瀏覽器策略允許時生效
}
<style>
/* 頁面內容最小寬高,防止擠壓錯位 */
.page-container {
min-width: 500px; /* 內容不小於 500px */
min-height: 400px; /* 內容不小於 400px */
margin: 0 auto; /* 居中 */
}
/* 或針對 body */
body {
min-width: 500px;
min-height: 400px;
}
</style>
<div class="page-container">...頁面內容...</div>
// 打開受控尺寸彈出窗
function openControlledPopup(url, width, height) {
const left = (screen.width - width) / 2;
const top = (screen.height - height) / 2;
const features = `width=${width},height=${height},left=${left},top=${top},resizable=yes,scrollbars=yes`;
const win = window.open(url, '_blank', features);
if (!win || win.closed || typeof win.closed === 'undefined') {
alert('請允許彈出窗口'); // 被攔截提示
return null;
}
return win;
}
// 內部頁面可自我調整(僅限彈出窗)
window.addEventListener('load', () => {
if (window.opener) { // 判斷是否為彈出窗
window.resizeTo(600, 500);
}
});
| 瀏覽器 | window.resizeTo 主窗口 | window.open 彈出窗 | 備註 |
|---|---|---|---|
| Chrome 40+ | ❌ 無效 | ⚠️ 受彈出窗攔截器影響 | 需用戶手势觸發 |
| Firefox 3+ | ❌ 無效 | ✅ 生效(about:config 可禁用) | dom.disable_window_move_resize |
| Safari | ❌ 無效 | ⚠️ 受智能防蹤影響 | |
| Edge | ❌ 無效 | ⚠️ 同 Chrome | |
| IE 11 | ✅ 生效 | ✅ 生效 | 已停止維護 |