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

C# 修改 IE 與 Firefox JavaScript 啟用狀態:登錄表與 prefs.js 實作

     編輯:關於C#

自動化測試、安全基準掃描、瀏覽器強化工具常需程式化切換 IE / Firefox 的 JavaScript 執行權限。IE 透過登錄表 `Zones\3\1400` 控制,Firefox 透過設定檔 `prefs.js` 中 `user_pref("javascript.enabled", true/false)` 控制。本文提供完整讀寫實作、路徑解析、權限注意事項。

1. Internet Explorer:登錄表控制

關鍵路徑

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\1400
  • Zone 3 = Internet 區域 (預設瀏覽網站所在區域)。
  • 值 1400 = "Active scripting" (JavaScript)。
  • 0 = 啟用、1 = 提示、3 = 停用。

讀寫實作

using Microsoft.Win32;

const string IeZonePath = @"Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3";

public static bool GetIeScriptEnabled()
{
    using var key = Registry.CurrentUser.OpenSubKey(IeZonePath, false);
    return key?.GetValue("1400") is int v && v == 0;
}

public static void SetIeScriptEnabled(bool enabled)
{
    using var key = Registry.CurrentUser.OpenSubKey(IeZonePath, true);
    key?.SetValue("1400", enabled ? 0 : 3, RegistryValueKind.DWord);
}

2. Firefox:prefs.js 文字檔控制

設定檔路徑解析

%APPDATA%\Mozilla\Firefox\Profiles\.default-release\prefs.js
  • Profile 資料夾名稱隨機,需掃描 `Profiles` 目錄尋找包含 `.default` 的資料夾。
  • Firefox 執行時會鎖定 `prefs.js`,**必須在 Firefox 關閉狀態下修改**,否則重啟時會被覆蓋。

讀寫實作

using System.IO;
using System.Text;

public static string FindFirefoxPrefsPath()
{
    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))
    {
        if (dir.Contains(".default"))
        {
            string prefs = Path.Combine(dir, "prefs.js");
            if (File.Exists(prefs)) return prefs;
        }
    }
    return null;
}

public static bool GetFirefoxScriptEnabled(string prefsPath)
{
    if (!File.Exists(prefsPath)) return true; // 預設啟用
    foreach (var line in File.ReadLines(prefsPath, Encoding.UTF8))
    {
        if (line.Contains("javascript.enabled"))
        {
            return line.Contains("true"); // user_pref("javascript.enabled", true);
        }
    }
    return true; // 找不到設定 = 預設啟用
}

public static void SetFirefoxScriptEnabled(string prefsPath, bool enabled)
{
    if (!File.Exists(prefsPath)) return;
    var lines = new List(File.ReadAllLines(prefsPath, Encoding.UTF8));
    bool found = false;
    for (int i = 0; i < lines.Count; i++)
    {
        if (lines[i].Contains("javascript.enabled"))
        {
            lines[i] = $@"user_pref(""javascript.enabled"", {enabled.ToString().ToLower()});";
            found = true;
            break;
        }
    }
    if (!found)
        lines.Add($@"user_pref(""javascript.enabled"", {enabled.ToString().ToLower()});");

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

3. 完整整合範例

static void Main()
{
    // IE
    Console.WriteLine($"IE JS Enabled: {GetIeScriptEnabled()}");
    SetIeScriptEnabled(false);
    Console.WriteLine($"IE JS Enabled after disable: {GetIeScriptEnabled()}");

    // Firefox
    string prefs = FindFirefoxPrefsPath();
    if (prefs != null)
    {
        Console.WriteLine($"Firefox prefs: {prefs}");
        Console.WriteLine($"FF JS Enabled: {GetFirefoxScriptEnabled(prefs)}");
        SetFirefoxScriptEnabled(prefs, false);
        Console.WriteLine($"FF JS Enabled after disable: {GetFirefoxScriptEnabled(prefs)}");
    }
    else Console.WriteLine("Firefox profile not found.");
}

注意事項與限制

項目說明
Firefox 執行中修改無效,Firefox 關閉時會以記憶體狀態覆寫 prefs.js。必須確認進程已結束。
多 Profile掃描 `.default` 可能匹配多個,建議讀取 `profiles.ini` 解析 `Default=...` 或 `StartWithLastProfile=1` 確定活躍 Profile。
ESR / 企業版可透過 `policies.json` (Enterprise Policies) 統一管理,優先級高於 prefs.js。
IE 區域Intranet (Zone 1)、Trusted (Zone 2)、Restricted (Zone 4) 各有獨立 1400 值,跨區域需分別設定。
Edge (Chromium)不使用此登錄表,需透過 Group Policy (`ExtensionInstallForcelist` 等) 或 `--disable-javascript` 啟動參數。
權限寫入 `HKCU` 通常無需管理員;修改 `prefs.js` 需該使用者寫入權限。

現代替代方案

  • Selenium / Playwright / Puppeteer:啟動瀏覽器時傳遞參數 `--disable-javascript` 或設定 Profile 偏好,無需修改系統全域設定。
  • Group Policy / Intune / MDM:企業環境統一管理,而非單機腳本。

結語

修改 IE/Firefox JavaScript 狀態屬於「系統級配置變更」,影響面廣,**僅建議用於自動化測試環境佈建、安全基準驗證、瀏覽器強化工具**。一般應用程式不應動態修改使用者瀏覽器設定。實作時務必處理:Firefox 進程檢查、Profile 自動偵測、編碼 (UTF-8)、錯誤恢復。

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