UiPath Documentation
studio
2024.10
false
Studio ガイド
重要 :
このコンテンツの一部は機械翻訳によって処理されており、完全な翻訳を保証するものではありません。 新しいコンテンツの翻訳は、およそ 1 ~ 2 週間で公開されます。

v128 または v115.13 ESR より古いバージョンの Firefox での拡張機能

2025 年 3 月 14 日に Mozilla のルート証明書の有効期限が切れることによる、v128 または v115.13 ESR よりも古いバージョンの Firefox で UiPath 拡張機能を復元します。

2025 年 3 月 14 日の Firefox のルート証明書の有効期限に関する Mozilla のこちらの発表によると、v128 または v115.13 ESR よりも古いバージョンの Firefox には拡張機能をインストールできません。

  • 拡張機能がすでに Firefox にインストールされている場合、ルート証明書の有効期限が切れた後も引き続き機能します。
  • ルート証明書の有効期限が切れた後に拡張機能をインストールすると、拡張機能は無効化され、機能しません。

適用できる回避策はありますが、それが有効であるかどうかは Firefox のバージョンがどれくらい古いか、また ESR (延長サポートリリース) バージョンであるかどうかによって異なります。

Firefox ESR 向けの解決策​

  1. about:config に移動します。
  2. xpinstall.signatures.required フラグを false に切り替えます。

以下のいずれかの方法を使用して、この設定をすべてのプロファイルに自動的に適用することをお勧めします。

Firefox v102.10 ESR 以降​

グループ ポリシーを使用すると、すべてのユーザーとプロファイルの xpinstall.signatures.required 設定を自動的に変更できます。詳細については、Firefox のポリシー テンプレートをご覧ください。

Firefox v102.10 ESR より古いバージョン​

古いバージョンの Firefox は、グループ ポリシー全体を通じて xpinstall.signatures.required をサポートしていません。代替手段として AutoConfig ファイルを使用できます。

  1. 以下をテキスト ファイルに保存します。
    // First line must be a comment.
    pref("xpinstall.signatures.required", false);
    // First line must be a comment.
    pref("xpinstall.signatures.required", false);
    
  2. このテキスト ファイルの名前を allow-unsigned-extensions.cfg とします。
  3. 以下をテキスト ファイルに保存します。
    // 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. このテキスト ファイルの名前を allow-unsigned-extensions.js とします。
  5. Firefox のインストール先ディレクトリを探します。通常は C:\Program Files\Mozilla Firefox です。
  6. allow-unsigned-extensions.cfg を C:\Program Files\Mozilla Firefox にコピーします。
  7. allow-unsigned-extensions.js を C:\Program Files\Mozilla Firefox\defaults\pref にコピーします。

Firefox - 通常のリリース​

ESR 以外のリリースの Firefox では、AutoConfig ファイルを使用する必要があります。

  1. 以下をテキスト ファイルに保存します。
    // 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. このテキスト ファイルの名前を enablelegacy.cfg とします。
  3. 以下をテキスト ファイルに保存します。
    // 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. このテキスト ファイルの名前を enablelegacy-prefs.js とします。
  5. Firefox のインストール先ディレクトリを探します。通常は C:\Program Files\Mozilla Firefox です。
  6. enablelegacy.cfg を C:\Program Files\Mozilla Firefox にコピーします。
  7. enablelegacy-prefs.js を C:\Program Files\Mozilla Firefox\defaults\pref にコピーします。
    注:

    102.10 ESR などの Firefox の最近のバージョンでは、このフラグを設定すると拡張機能が自動的に再度有効になります。68.0.2 ESR などの古いバージョンでは、拡張機能の再インストールが必要になることがあります。

68.0.2 ESR より古い Firefox は、UiPath の グループ ポリシー によるインストールでは機能しません。次の PowerShell スクリプトは、インストーラーの実行後に実行される修正です。この非対応機能は、Studio 2025.10 以降で修正される予定です。

一時的な回避策: 以下のスクリプトをファイル内に保存し (例: firefox-policy-and-profile-fix.ps1)、管理者権限で実行します。

# 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
}

このページは役に立ちましたか?

接続

ヘルプ リソース サポート

学習する UiPath アカデミー

質問する UiPath フォーラム

最新情報を取得