開發者在 MyEclipse 內部瀏覽器預覽 JSP/HTML 頁面時,調用 window.open() 無法彈出新窗口;但將相同代碼保存為 .html 文件用系統默認瀏覽器打開卻正常彈出。
MyEclipse 內部瀏覽器基於 Eclipse SWT Browser 組件,默認啟用彈窗攔截器。 該組件模擬的是 IE 內核(Windows 下)或 WebKit(Linux/macOS),其安全策略比較嚴格,會自動攔截非用戶直接交互觸發的 window.open() 調用。
<script>
function fun(thisurl) {
// 參數錯誤:heigth 應為 height,resizeable 應為 resizable
window.open(thisurl, "頁面標題", "width=370,heigth=160,scrollbars=yes,resizeable=no");
}
</script>
除環境問題外,代碼還存在參數拼寫錯誤:
heigth → heightresizeable → resizableMyEclipse 內部瀏覽器僅供快速預覽,實際開發調試請始終使用 Chrome/Edge/Firefox 等現代瀏覽器。配置 MyEclipse 使用外部瀏覽器:
<button onclick="openWindow('https://example.com')">打開窗口</button>
<script>
function openWindow(url) {
// 修正參數拼寫,特性字符串不含空格
const features = "width=370,height=160,scrollbars=yes,resizable=no";
// 用戶點擊按鈕屬於直接交互,通常不會被攔截
window.open(url, "頁面標題", features);
}
</script>
嘗試在 Eclipse 偏好設置中關閉彈窗攔截,但 SWT Browser 組件對此支持有限,不同版本行為不一。
| 場景 | 推薦做法 |
|---|---|
| 開發調試 | 外部瀏覽器 + DevTools(F12) |
| 生產環境彈窗 | 避免使用 window.open,改用模態框/側邊欄/新標籤頁(target="_blank") |
| 必須用彈窗 | 綁定用戶點擊事件,參數規範化,提供降級方案 |
| 移動端 | 彈窗體驗極差,堅決不用 |
MyEclipse 內部瀏覽器彈窗被攔截是環境限制,非代碼邏輯錯誤。開發者應:
window.open 參數拼寫(height、resizable)