studio
2024.10
false
Important :
La localisation du contenu nouvellement publié peut prendre 1 à 2 semaines avant d’être disponible.
UiPath logo, featuring letters U and I in white

Guide de l’utilisateur de Studio

Dernière mise à jour 3 sept. 2025

Extension sur les versions de Firefox antérieures à v128 ou v115 ESR

Selon l'annonce de Mozilla concernant l'expiration du certificat racine de Firefox le 14 mars 2025, les extensions ne s'installent pas dans les versions de Firefox antérieures à v128 ou v115.13 ESR.
  • Si l'extension est déjà installée dans Firefox, elle continuera de fonctionner même après l'expiration du certificat racine.
  • Si l'extension est installée après l'expiration du certificat racine, elle sera désactivée et ne fonctionnera pas.

Vous pouvez appliquer certaines solutions de contournement, mais cela dépend de l'ancienneté de votre version de Firefox et de s'il s'agit ou non d'une version ESR (Extended Support Release).

Solution pour Firefox ESR

  1. Accédez à about:config .
  2. Activez/désactivez l'indicateur xpinstall.signatures.required pour false.

Il est préférable d'appliquer automatiquement ce paramètre à tous les profils à l'aide d'une des méthodes répertoriées ci-dessous.

Firefox v102.10 ESR ou version ultérieure

Vous pouvez utiliser la stratégie de groupe pour modifier automatiquement la préférence xpinstall.signatures.required de tous les utilisateurs et profils. Pour de plus amples informations, consultez la section Modèles de stratégies de Firefox.

Version Firefox plus ancienne que v102.10 ESR

Les anciennes versions de Firefox ne prennent pas en charge xpinstall.signatures.required dans le cadre d'une stratégie de groupe. Pour contourner ce problème, vous pouvez utiliser des fichiers AutoConfig :
  1. Enregistrez les éléments suivants dans un fichier texte :
    // First line must be a comment.
    pref("xpinstall.signatures.required", false);// First line must be a comment.
    pref("xpinstall.signatures.required", false);
  2. Nommez le fichier texte allow-unsigned-extensions.cfg.
  3. Enregistrez les éléments suivants dans un fichier texte :
    // First line must be a comment. 
    pref("general.config.filename", "allow-unsigned-extensions.cfg"); pref("general.config.obscure_value", 0);// First line must be a comment. 
    pref("general.config.filename", "allow-unsigned-extensions.cfg"); pref("general.config.obscure_value", 0);
  4. Nommez le fichier texte allow-unsigned-extensions.js.
  5. Recherchez le répertoire d'installation de Firefox, généralement C:\Program Files\Mozilla Firefox.
  6. Copiez allow-unsigned-extensions.cfg dans C:\Program Files\Mozilla Firefox.
  7. Copiez allow-unsigned-extensions.js dans C:\Program Files\Mozilla Firefox\pref.

Firefox – Versions standard

Pour les versions non-ESR de Firefox, vous devez utiliser des fichiers AutoConfig.

  1. Enregistrez les éléments suivants dans un fichier texte :
    // First line must be a comment.
    
    // In Firefox 55+, settings to configure add-on signing (and legacy add-ons) are stored in AddonSettings.jsm
    // The module exports an object with read-only properties, but that is not an issue since we can just replace
    // the exported object.
    // https://searchfox.org/mozilla-central/rev/2e08acdf8862e68b13166970e17809a3b5d6a555/toolkit/mozapps/extensions/internal/AddonSettings.jsm
    
    Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
    
    function patchAddonSettings(modulePath) {
        var Module = Components.utils.import(modulePath, {});
        // Note: we read the data from preferences instead of hard-coding a "true", so
        // that by default legacy add-ons are disabled. This enables the user to only
        // enable legacy add-ons for specific Firefox profiles when really needed.
        var AddonSettings;
    
        if ("lazy" in Module) {
          AddonSettings = Object.create(Module.lazy.AddonSettings);
        } else {
          AddonSettings = Object.create(Module.AddonSettings);
        }
        XPCOMUtils.defineLazyPreferenceGetter(AddonSettings, "REQUIRE_SIGNING", "xpinstall.signatures.required", false);
        XPCOMUtils.defineLazyPreferenceGetter(AddonSettings, "ALLOW_LEGACY_EXTENSIONS", "extensions.legacy.enabled", true);
        XPCOMUtils.defineLazyPreferenceGetter(AddonSettings, "LANGPACKS_REQUIRE_SIGNING", "extensions.langpacks.signatures.required", false);
    
        if ("lazy" in Module) {
          Module.lazy.AddonSettings = AddonSettings;
        } else {
          Module.AddonSettings = AddonSettings;
        }
    }
    
    // This is necessary to allow legacy add-ons via preferences.
    try {
      patchAddonSettings("resource://gre/modules/addons/XPIProvider.jsm");
    } catch (e) {
      // AddonSettings is not in this file starting with Firefox 61,
      // but it comes back in Firefox 74
    }
    
    try {
      patchAddonSettings("resource://gre/modules/addons/XPIDatabase.jsm");
    } catch (e) {
      // AddonSettings is not in this file until Firefox 61
    }
    
    // This override is needed to enable unsigned add-ons via preferences.
    patchAddonSettings("resource://gre/modules/addons/XPIInstall.jsm");
    
    // This override is needed to allow unsigned add-ons to show up without warning in about:addons.
    // (this is UI-only, the add-on is not actually disabled despite what the UI claims).
    patchAddonSettings("resource://gre/modules/addons/AddonSettings.jsm");
    
    Components.classes['@mozilla.org/consoleservice;1']
    .getService(Components.interfaces.nsIConsoleService)
    .logStringMessage("enablelegacy.cfg: the extensions.legacy.enabled preference is working again.");
    
    pref("xpinstall.signatures.required", false);// First line must be a comment.
    
    // In Firefox 55+, settings to configure add-on signing (and legacy add-ons) are stored in AddonSettings.jsm
    // The module exports an object with read-only properties, but that is not an issue since we can just replace
    // the exported object.
    // https://searchfox.org/mozilla-central/rev/2e08acdf8862e68b13166970e17809a3b5d6a555/toolkit/mozapps/extensions/internal/AddonSettings.jsm
    
    Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
    
    function patchAddonSettings(modulePath) {
        var Module = Components.utils.import(modulePath, {});
        // Note: we read the data from preferences instead of hard-coding a "true", so
        // that by default legacy add-ons are disabled. This enables the user to only
        // enable legacy add-ons for specific Firefox profiles when really needed.
        var AddonSettings;
    
        if ("lazy" in Module) {
          AddonSettings = Object.create(Module.lazy.AddonSettings);
        } else {
          AddonSettings = Object.create(Module.AddonSettings);
        }
        XPCOMUtils.defineLazyPreferenceGetter(AddonSettings, "REQUIRE_SIGNING", "xpinstall.signatures.required", false);
        XPCOMUtils.defineLazyPreferenceGetter(AddonSettings, "ALLOW_LEGACY_EXTENSIONS", "extensions.legacy.enabled", true);
        XPCOMUtils.defineLazyPreferenceGetter(AddonSettings, "LANGPACKS_REQUIRE_SIGNING", "extensions.langpacks.signatures.required", false);
    
        if ("lazy" in Module) {
          Module.lazy.AddonSettings = AddonSettings;
        } else {
          Module.AddonSettings = AddonSettings;
        }
    }
    
    // This is necessary to allow legacy add-ons via preferences.
    try {
      patchAddonSettings("resource://gre/modules/addons/XPIProvider.jsm");
    } catch (e) {
      // AddonSettings is not in this file starting with Firefox 61,
      // but it comes back in Firefox 74
    }
    
    try {
      patchAddonSettings("resource://gre/modules/addons/XPIDatabase.jsm");
    } catch (e) {
      // AddonSettings is not in this file until Firefox 61
    }
    
    // This override is needed to enable unsigned add-ons via preferences.
    patchAddonSettings("resource://gre/modules/addons/XPIInstall.jsm");
    
    // This override is needed to allow unsigned add-ons to show up without warning in about:addons.
    // (this is UI-only, the add-on is not actually disabled despite what the UI claims).
    patchAddonSettings("resource://gre/modules/addons/AddonSettings.jsm");
    
    Components.classes['@mozilla.org/consoleservice;1']
    .getService(Components.interfaces.nsIConsoleService)
    .logStringMessage("enablelegacy.cfg: the extensions.legacy.enabled preference is working again.");
    
    pref("xpinstall.signatures.required", false);
    
  2. Nommez le fichier texte enable-legacy.cfg.
  3. Enregistrez les éléments suivants dans un fichier texte :
    // First line must be a comment. pref("general.config.filename", "enablelegacy.cfg"); 
    pref("general.config.obscure_value", 0); pref("general.config.sandbox_enabled", false);// First line must be a comment. pref("general.config.filename", "enablelegacy.cfg"); 
    pref("general.config.obscure_value", 0); pref("general.config.sandbox_enabled", false);
  4. Nommez le fichier texte enablelegacy-prefs.js.
  5. Recherchez le répertoire d'installation de Firefox, généralement C:\Program Files\Mozilla Firefox.
  6. Copiez allow-unsigned-extensions.cfg dans C:\Program Files\Mozilla Firefox.
  7. Copiez allow-unsigned-extensions.js dans C:\Program Files\Mozilla Firefox\defaults\pref.
Remarque :

Les versions récentes de Firefox, telles que 102.10 ESR, réactivent automatiquement l'extension une fois que l'indicateur est défini. Dans les versions antérieures telles que 68.0.2 ESR, il peut être nécessaire de réinstaller l'extension.

La méthode d'installation Group Policy Offline (Stratégie de groupe hors ligne) ne fonctionne pas avec Firefox 68.0.2 ESR et éventuellement les versions antérieures. Une solution de contournement temporaire consiste à ajouter le code suivant à un script PowerShell et à l'exécuter avec des privilèges d'administrateur :

# Define the registry path
$regPath = "HKLM:\SOFTWARE\Policies\Mozilla\Firefox\Extensions\Install"

function Convert-WindowsPathToFileUrl($path) {
    $unixPath = $path -replace '\\', '/'
    $escapedPath = $unixPath -replace ' ', '%20'
    return "file:///" + $escapedPath
}

function Fix-FirefoxProfile($prefsPath, $fileUrl) {
    if (-not (Test-Path $prefsPath)) {
        Write-Host "prefs.js not found: $prefsPath"
        return
    }

    Write-Host "Processing prefs.js: $prefsPath"

    $content = Get-Content -Path $prefsPath -Raw

    $pattern = 'user_pref\("browser\.policies\.runOncePerModification\.extensionsInstall",\s*"(.+?)"\);'

    if (-not ($content -match $pattern)) {
        Write-Host " -> No matching preference found in prefs.js."
        return
    }

    $jsonArrayString = $matches[1]

    # Unescape \" to "
    $jsonArrayStringUnescaped = $jsonArrayString -replace '\\\"', '"'

    try {
        $list = ConvertFrom-Json -InputObject $jsonArrayStringUnescaped
    } catch {
        Write-Host " -> Error parsing JSON inside prefs.js preference (after unescaping)."
        return
    }

    if (-not ($list -contains $fileUrl)) {
        Write-Host " -> File URL not present in extensionsInstall list."
        return
    }

    $newList = $list | Where-Object { $_ -ne $fileUrl }

    $newJsonArrayString = ($newList | ConvertTo-Json -Compress)

    # prefs.js expects it wrapped as a string, escaping " as \"
    $escapedNewJsonArrayString = $newJsonArrayString -replace '"', '\"'

    $newPrefLine = "user_pref(""browser.policies.runOncePerModification.extensionsInstall"", `"$escapedNewJsonArrayString`");"

    # Replace the old line
    $oldPrefLine = $matches[0]
    $content = $content -replace [regex]::Escape($oldPrefLine), $newPrefLine

    Set-Content -Path $prefsPath -Value $content -Encoding UTF8
    Write-Host " -> prefs.js updated."
}

function Fix-AllFirefoxProfiles($fileUrl) {
    $profilesPath = "$env:APPDATA\Mozilla\Firefox\Profiles"

    if (-not (Test-Path $profilesPath)) {
        Write-Host "Firefox profiles directory not found: $profilesPath"
        return
    }

    $profiles = Get-ChildItem -Path $profilesPath -Directory
    foreach ($profile in $profiles) {
        $prefsPath = Join-Path $profile.FullName "prefs.js"
        Fix-FirefoxProfile -prefsPath $prefsPath -fileUrl $fileUrl
    }
}

if (-not (Test-Path $regPath)) {
    Write-Host "Registry path not found: $regPath"
    return
}

$values = Get-ItemProperty -Path $regPath

foreach ($property in $values.PSObject.Properties) {
    $name = $property.Name
    $value = $property.Value

    if ($value -notmatch "^[a-zA-Z]:\\.*\\uipath-ff\.xpi$") {
        continue
    }

    Write-Host "Found Windows path for uipath-ff.xpi in entry '$name': $value"

    $fileUrl = Convert-WindowsPathToFileUrl $value
    Write-Host " -> Converted to file URL: $fileUrl"

    Set-ItemProperty -Path $regPath -Name $name -Value $fileUrl
    Write-Host " -> Updated registry key '$name'."

    Fix-AllFirefoxProfiles -fileUrl $fileUrl
}# Define the registry path
$regPath = "HKLM:\SOFTWARE\Policies\Mozilla\Firefox\Extensions\Install"

function Convert-WindowsPathToFileUrl($path) {
    $unixPath = $path -replace '\\', '/'
    $escapedPath = $unixPath -replace ' ', '%20'
    return "file:///" + $escapedPath
}

function Fix-FirefoxProfile($prefsPath, $fileUrl) {
    if (-not (Test-Path $prefsPath)) {
        Write-Host "prefs.js not found: $prefsPath"
        return
    }

    Write-Host "Processing prefs.js: $prefsPath"

    $content = Get-Content -Path $prefsPath -Raw

    $pattern = 'user_pref\("browser\.policies\.runOncePerModification\.extensionsInstall",\s*"(.+?)"\);'

    if (-not ($content -match $pattern)) {
        Write-Host " -> No matching preference found in prefs.js."
        return
    }

    $jsonArrayString = $matches[1]

    # Unescape \" to "
    $jsonArrayStringUnescaped = $jsonArrayString -replace '\\\"', '"'

    try {
        $list = ConvertFrom-Json -InputObject $jsonArrayStringUnescaped
    } catch {
        Write-Host " -> Error parsing JSON inside prefs.js preference (after unescaping)."
        return
    }

    if (-not ($list -contains $fileUrl)) {
        Write-Host " -> File URL not present in extensionsInstall list."
        return
    }

    $newList = $list | Where-Object { $_ -ne $fileUrl }

    $newJsonArrayString = ($newList | ConvertTo-Json -Compress)

    # prefs.js expects it wrapped as a string, escaping " as \"
    $escapedNewJsonArrayString = $newJsonArrayString -replace '"', '\"'

    $newPrefLine = "user_pref(""browser.policies.runOncePerModification.extensionsInstall"", `"$escapedNewJsonArrayString`");"

    # Replace the old line
    $oldPrefLine = $matches[0]
    $content = $content -replace [regex]::Escape($oldPrefLine), $newPrefLine

    Set-Content -Path $prefsPath -Value $content -Encoding UTF8
    Write-Host " -> prefs.js updated."
}

function Fix-AllFirefoxProfiles($fileUrl) {
    $profilesPath = "$env:APPDATA\Mozilla\Firefox\Profiles"

    if (-not (Test-Path $profilesPath)) {
        Write-Host "Firefox profiles directory not found: $profilesPath"
        return
    }

    $profiles = Get-ChildItem -Path $profilesPath -Directory
    foreach ($profile in $profiles) {
        $prefsPath = Join-Path $profile.FullName "prefs.js"
        Fix-FirefoxProfile -prefsPath $prefsPath -fileUrl $fileUrl
    }
}

if (-not (Test-Path $regPath)) {
    Write-Host "Registry path not found: $regPath"
    return
}

$values = Get-ItemProperty -Path $regPath

foreach ($property in $values.PSObject.Properties) {
    $name = $property.Name
    $value = $property.Value

    if ($value -notmatch "^[a-zA-Z]:\\.*\\uipath-ff\.xpi$") {
        continue
    }

    Write-Host "Found Windows path for uipath-ff.xpi in entry '$name': $value"

    $fileUrl = Convert-WindowsPathToFileUrl $value
    Write-Host " -> Converted to file URL: $fileUrl"

    Set-ItemProperty -Path $regPath -Name $name -Value $fileUrl
    Write-Host " -> Updated registry key '$name'."

    Fix-AllFirefoxProfiles -fileUrl $fileUrl
}

Cette page vous a-t-elle été utile ?

Obtenez l'aide dont vous avez besoin
Formation RPA - Cours d'automatisation
Forum de la communauté UiPath
Uipath Logo
Confiance et sécurité
© 2005-2025 UiPath Tous droits réservés.