window.showModalDialog 是 IE 專有 API,Chrome、Firefox、Edge 等現代瀏覽器均不支持。舊代碼依賴 window.dialogArguments 和 window.returnValue 進行父子頁通信,需遷移到標準化方案。
// 打開子頁面
var childWin = window.open('child.html', '_blank', 'width=600,height=400');
// 監聽子頁面發送的消息
window.addEventListener('message', function(event) {
// 安全性驗證來源
if (event.origin !== 'https://your-domain.com') return;
console.log('收到子頁數據:', event.data);
// 業務處理...
});
// 向父頁發送數據
function sendToParent(data) {
// 確保父頁面已就緒
if (window.opener) {
window.opener.postMessage(data, 'https://your-domain.com'); // 目標源
}
}
// 示例:按鈕點擊傳值
document.getElementById('btn').onclick = function() {
sendToParent({ type: 'result', value: '用戶輸入的內容' });
};
postMessage 支持指定 targetOrigin,防止消息被惡意頁面竊取。childWin.postMessage(...)),子頁通過 window.addEventListener('message', ...) 接收。若項目仍依賴 showModalDialog 風格的同步阻塞行為,可考慮:
postMessage 實現。拋棄 showModalDialog,擁抱 window.open + postMessage,是現代 Web 開發中實現彈窗父子頁傳值的標準、安全、跨瀏覽器方案。