需求:以 C# 程式碼切換 IE 與 Firefox 的 JavaScript 啟用/停用狀態。本文比較兩大類方案並確立實作架構。
| 方案 | 原理 | 優點 | 缺點 |
|---|---|---|---|
| UI 自動化 (SendKeys/UIAutomation) | 模擬使用者點選選單 → 選項 → 安全性 → 自訂等級 | 通用、無需研究內部儲存 | 極不穩定、需視窗焦點、版本易失效、慢 |
| 修改儲存機制 (登錄/設定檔) | 直接寫入 IE 登錄機碼 / Firefox prefs.js | 快速、無 UI 依賴、可批次、可驗證 | 需研究儲存格式、Firefox 需關閉瀏覽器、權限問題 |
結論:採用方案二 (修改儲存機制),本系列採此路徑。
HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\。1400 (DWORD):0=啟用、1=提示、3=停用。%APPDATA%\Mozilla\Firefox\Profiles\.default\prefs.js 。user_pref("javascript.enabled", true/false);。true 視為啟用;false 為停用。
public interface IBrowserScriptController
{
bool IsScriptEnabled();
void SetScriptEnabled(bool enabled);
}
public class IEScriptController : IBrowserScriptController { ... }
public class FirefoxScriptController : IBrowserScriptController { ... }
// 使用
var controllers = new IBrowserScriptController[]
{
new IEScriptController(zone: 3), // 網際網路區域
new FirefoxScriptController()
};
foreach (var c in controllers)
{
Console.WriteLine($"{c.GetType().Name}: {c.IsScriptEnabled()}");
c.SetScriptEnabled(false);
}
提供 IEScriptController 與 FirefoxScriptController 的完整實作細節,含登錄讀寫、prefs.js 解析、例外處理與單元測試建議。