Chrome Extension 無法直接自動點擊 alert()、confirm() 或 prompt() 這類 JavaScript 彈出視窗,因為這些是 瀏覽器模態對話框,會阻塞 JavaScript 的執行,且受安全性限制,擴充功能無法直接控制它們。
不過,你可以用 以下方式間接處理:
1️⃣ 攔截 window.alert 讓它自動關閉
擴充功能的內容腳本(Content Script)可以覆蓋 window.alert,讓它變成一個無作用的函數,這樣網頁上的 alert() 就不會真正彈出:
// 在 content script 中執行
window.alert = function() {};
window.confirm = function() { return true; }; // 自動按「確定」
window.prompt = function() { return null; }; // 自動點「取消」
2️⃣ 使用 debugger Protocol 遠端控制 alert
如果你希望擴充功能能夠真的 自動點擊 alert(),你可以使用 Chrome DevTools Protocol (CDP),透過 chrome.debugger 來攔截並關閉對話框(需要 debugger 權限)。
🚀 示例:用 chrome.debugger 關閉 alert
在擴充功能的背景程式 (background.js) 中:
chrome.debugger.attach({ tabId: YOUR_TAB_ID }, "1.3", function() {
chrome.debugger.sendCommand({ tabId: YOUR_TAB_ID }, "Page.handleJavaScriptDialog", {
accept: true // 自動按「確定」
});
});
這樣就能讓擴充功能在偵測到 alert 彈出時,直接「按下」確定。
3️⃣ 模擬使用者按鍵(僅適用於特定場景)
如果 alert() 已經彈出,而你的擴充功能沒有 debugger 權限,可以嘗試 模擬鍵盤按鍵(例如 Enter)來關閉對話框:
document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter' }));
不過,這種方式 不一定有效,因為瀏覽器的 alert 是模態對話框,可能無法被 JavaScript 操作。
✅ 結論
- 最佳解法: 用
window.alert = function() {};來攔截alert(),讓它不彈出。 - 進階解法: 如果你的擴充功能有
debugger權限,可以用chrome.debugger來自動按「確定」。 - 可行但不穩定: 嘗試模擬
Enter鍵來關閉 alert(視瀏覽器行為而定)。