chrome extension 是否可以自動點擊網頁彈出的 alert?

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(視瀏覽器行為而定)。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *