首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 程式控制 Firefox 與 IE JavaScript 啟用狀態 (二) - 實作細節

     編輯:關於C語言

承上篇,本文提供修改 IE 登錄與 Firefox prefs.js 的完整程式碼,實現程式化切換 JavaScript 啟用/停用。

IE:登錄機制

IE 安全區域設定儲存於 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\。鍵值 1400 (Active Scripting):0 = 啟用,3 = 停用。

讀取目前狀態


public static bool GetIECurrentScriptState(string zonePath = @"Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3")
{
    using (var key = Registry.CurrentUser.OpenSubKey(zonePath, true))
    {
        var val = key?.GetValue("1400");
        return val != null && (int)val == 0; // 0=啟用, 3=停用
    }
}

停用/啟用


public static void SetIEScriptEnabled(bool enabled, string zonePath = @"Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3")
{
    using (var key = Registry.CurrentUser.OpenSubKey(zonePath, true))
    {
        key?.SetValue("1400", enabled ? 0 : 3, RegistryValueKind.DWord);
    }
    // 通知 IE 重新讀取設定 (可選)
    InternetSetOption(IntPtr.Zero, 39, IntPtr.Zero, 0); // INTERNET_OPTION_SETTINGS_CHANGED
}

[DllImport("wininet.dll")] static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength);

Firefox:prefs.js 檔案操作

Firefox 設定儲存於設定檔目錄下的 prefs.js:user_pref("javascript.enabled", true/false);。設定檔目錄名稱含隨機字串 (如 xxxxxxxx.default),需動態查找。

查找 prefs.js 路徑


public static string FindFirefoxPrefsJs()
{
    string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
    string profilesDir = Path.Combine(appData, "Mozilla", "Firefox", "Profiles");
    if (!Directory.Exists(profilesDir)) return null;

    foreach (var dir in Directory.GetDirectories(profilesDir))
    {
        string prefs = Path.Combine(dir, "prefs.js");
        if (File.Exists(prefs)) return prefs;
    }
    return null;
}

修改 javascript.enabled


public static void SetFirefoxScriptEnabled(bool enabled)
{
    string prefsPath = FindFirefoxPrefsJs();
    if (prefsPath == null) throw new FileNotFoundException("找不到 Firefox prefs.js");

    var lines = File.ReadAllLines(prefsPath, Encoding.UTF8);
    bool found = false;
    for (int i = 0; i < lines.Length; i++)
    {
        if (lines[i].Contains("javascript.enabled"))
        {
            lines[i] = $'user_pref("javascript.enabled", {enabled.ToString().ToLower()});';
            found = true;
            break;
        }
    }
    if (!found)
        Array.Resize(ref lines, lines.Length + 1);
        lines[^1] = $'user_pref("javascript.enabled", {enabled.ToString().ToLower()});';

    File.WriteAllLines(prefsPath, lines, Encoding.UTF8);
}

注意事項

  • Firefox 必須關閉:修改 prefs.js 時 Firefox 不能執行,否則啟動時會覆寫回原值。
  • 多設定檔:上方程式碼取第一個找到的設定檔,生產環境需讓使用者選擇或匹配 profiles.ini 中的預設設定檔。
  • IE 區域識別碼:預設網際網路區域為 3,信任網站為 2,區域網路為 1,受限網站為 4。需根據目標區域調整路徑。
  • 權限:寫入登錄需管理員權限 (或至少對該機碼有寫入權)。

現代替代方案

若目標為自動化測試/爬蟲,建議直接使用 Selenium WebDriver / Playwright / Puppeteer Sharp 等瀏覽器自動化框架,它們提供原生 API 控制 JavaScript 啟用狀態,無需修改系統設定,且支援無頭模式、跨平台。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved