atarjono
Goto Top

Firefox pdf Einstellung verteilen

Hallo zusammen,

mit der *.cfg Datei kann man ja vieles in Firefox ESR einstellen.
Was muss ich tun, damit *.pdf also "applikation/pdf" immer mit dem externen Acrobat Reader (nicht Acrobat in Firefox) geöffnet wird?

Damit in interne FF-Reader deaktiviert wird, habe ich schon geschafft:
lockPref("pdfjs.disabled", true);

Wenn ich aber nur dies habe, dann werden alle *.pdf nur gespeichert, aber nicht geöffnet.

Danke schonmal im vorraus.

Content-ID: 371464

Url: https://administrator.de/contentid/371464

Ausgedruckt am: 24.11.2024 um 23:11 Uhr

sabines
sabines 18.04.2018 um 14:32:04 Uhr
Goto Top
erikro
erikro 18.04.2018 um 17:00:31 Uhr
Goto Top
Hallo,

ich vermute mal, Du suchst nach einer automatisierbaren Lösung und nicht nach Klickiklicki im Konfigurator. ;)

Wie Dateien behandelt werden, wird in handlers.json festgelegt. Die liegt in

C:\Users\%username%\AppData\Roaming\Mozilla\Firefox\Profiles\bmxkug7c.default

Der entscheidende Eintrag ist:

"application/pdf":{"action":4,"extensions":["pdf"]}  

Ändere 3 auf 4 und es wird das Programm benutzt, dass der Standardreader für PDFs im System ist. Ist Acrobat nicht der Standardreader sieht das so aus

"application/pdf":{"action":2,"extensions":["pdf"],"handlers":[{"name":"AcroRd32.exe","path":"C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\AcroRd32.exe"}]  

hth und liebe Grüße

Erik
atarjono
atarjono 19.04.2018 um 13:58:50 Uhr
Goto Top
@ Sabine:

wie erikro richtig vermutet hat, suche ich nach einer Lösung zum verteilen (ca 700 PC) und nicht wie die MA sich dahin klicken soll..

@ erikro:
ich finde bei mir kein
"handlers.json"
Liegt es evtl., dass wir die ESR Version benutzen?
ff_1
erikro
erikro 19.04.2018 um 14:16:35 Uhr
Goto Top
Seit Version 56 (glaube ich) heißt die Datei so. Bis dahin war das die mimetype.rdf. Aber ich hoffe mal, dass Dein Browser nicht so alt ist. ;)
colinardo
Lösung colinardo 19.04.2018, aktualisiert am 22.11.2021 um 18:23:52 Uhr
Goto Top
Servus,
entweder du wartest bis 8. Mai (Announcing ESR60 with policy engine), denn dann kommt dieser mit einer neuen Policy-Engine, die direktes integrieren via admx ermöglicht, oder du scriptest dir das als Beispiel mit Powershell und deployst das per Anmeldescript z.B. so:
<#
    Deploy Firefox mimetype handler settings (json / rdf)
#>

# Get current Firefox profile folder
$firefoxprofile = "$env:APPDATA\Mozilla\Firefox\$([regex]::match((gc "$env:APPDATA\Mozilla\Firefox\profiles.ini" | out-string),'(?im)(?<=^Default=).*\.default.*').Value.trim())"  
# Path of handlers.json
$handlerjson = "$firefoxprofile\handlers.json"  
# Path of mimeTypes.rdf
$handlerrdf = "$firefoxprofile\mimeTypes.rdf"  

# test if either json or rdf file exists
if (Test-Path $handlerjson){
    write-host "Modifying mimetype settings in 'handlers.json'." -F Green  
    # define mimetype and settings ------------------------------
    $mimetype = 'application/pdf'  
    $settings = [pscustomobject]@{action=4;extensions=@('pdf')}  
    # -----------------------------------------------------------
    # load settings from json
    $json = ConvertFrom-Json (gc $handlerjson)
    # if mime type is defined change settings
    if ($json.mimeTypes.$mimetype -ne $null){
        $json.mimeTypes.$mimetype = $settings
    }else{
        # create mimetype entry with settings
        $json.mimeTypes | Add-Member -MemberType NoteProperty -Name $mimetype -Value $settings -Force
    }
    # write changes back to handlers.json
    $json | ConvertTo-Json -Depth 100 -Compress | sc $handlerjson -Force
}elseif(Test-Path $handlerrdf){
    write-host "Modifying mimetype settings in 'mimeTypes.rdf'." -F Green  
    # load settings from rdf
    $xml = [xml](gc $handlerrdf)
    # define namespace
    $ns = 'http://home.netscape.com/NC-rdf#'  
    # select mimetype node
    $node = $xml.RDF.Description | ?{$_.about -eq 'urn:mimetype:handler:application/pdf'}  
    # set attributes to open pdf with default system pdf handler
    $node.SetAttribute("useSystemDefault",$ns,'true') | out-null  
    $node.SetAttribute("alwaysAsk",$ns,'false') | out-null  
    $node.RemoveAttribute("handleInternal",$ns) | out-null  
    # save settings back nto rdf
    $xml.Save($handlerrdf)
}

back-to-topErgänzung:


Für alle anderen hier noch zwei Funktionen zum einfacheren Konfigurieren der handlers.json mittels CMDLets (Beispiele zur Nutzung der Funktionen findet sich in der Synopsis oberhalb der Funktionen:
<#
.Synopsis
   Add/Set Firefox Browser mimetypes for the current user
.DESCRIPTION
   Add/Set Firefox mimetypes to the current users firefox mimetypes
.EXAMPLE
    Set-FirefoxMimeType -mimetype "application/mms" -extensions 'mms' -handlerpath 'C:\Program Files (x86)\Windows Media Player\wmplayer.exe' -action OpenWithHandler  
   
        set/add mimetype to open with specific application
.EXAMPLE
    Set-FirefoxMimeType -mimetype 'application/pdf' -extensions 'pdf' -action OpenWithFirefox  

        set/add pdf to open with firefox automatically
.EXAMPLE
    Set-FirefoxMimeType -mimetype 'application/pdf' -extensions 'pdf' -action OpenWithHandler -askuser  

        set/add pdf to ask user wich application to use
#>
function Set-FirefoxMimeType {
    param(
        [parameter(mandatory=$true)][string]$mimetype,
        [parameter(mandatory=$true)][string[]]$extensions,
        [parameter(mandatory=$false)][string]$handlerpath,
        [parameter(mandatory=$true)][ValidateSet('SaveAsFile','OpenWithHandler','OpenWithFirefox','OpenWithWindowsDefault')][string]$action,  
        [parameter(mandatory=$false)][switch]$askuser
    )

    # Get current Firefox profile folder
    $firefoxprofile = "$env:APPDATA\Mozilla\Firefox\$([regex]::match((gc "$env:APPDATA\Mozilla\Firefox\profiles.ini" | out-string),'(?im)(?<=^Default=).*\.default.*').Value.trim())"  
    if (!$firefoxprofile){
        Write-Error "Default firefox profile could not be found!" -Category InvalidOperation  
        return
    }
    # Path of handlers.json
    $handlerjson = "$firefoxprofile\handlers.json"  

    # test if json exists
    if (Test-Path $handlerjson){
        write-host "Set mimetype '$mimetype' in 'handlers.json'." -F Green  
        # load settings from json
        $json = ConvertFrom-Json (gc $handlerjson)

        $settings = [ordered]@{
            # wich extensions to handle by entry
            extensions = [array]$extensions
             # what to to 0 = Save file / 2 = open with defined handler / 3 = open with firefox / 4 = open with Windows default application
            action= @{SaveAsFile = 0;OpenWithHandler = 2;OpenWithFirefox = 3; OpenWithWindowsDefault = 4}.$action
            
        }
        # wether to ask user before opening with application or not ($true = yes / $false = no)
        if($askuser.IsPresent){
             $settings.ask = $askuser.IsPresent
             $settings.action = 2
        }

        # only OpenWithHandler needs the following entries
        if($action -eq 'OpenWithHandler'){  
            # add array of handlers
            if ($handlerpath -ne ''){  
                $settings.handlers = @(@{
                    name = [io.path]::GetFileName($handlerpath)
                    path = $handlerpath
                })
            }
        }

        # create settings custom object from hashtable
        $settings = [pscustomobject]$settings

        # if mime type is defined change settings
        if ($json.mimeTypes.$mimetype -ne $null){
            $json.mimeTypes.$mimetype = $settings
        }else{
            # create mimetype entry with settings
            $json.mimeTypes | Add-Member -MemberType NoteProperty -Name $mimetype -Value $settings -Force
        }
        # write changes back to handlers.json
        $json | ConvertTo-Json -Depth 100 -Compress | sc $handlerjson -Force
    }else{
        Write-Warning "File handlers.json not found."  
    }
}

<#
.Synopsis
   Remove Firefox Browser mimetypes for the current user
.DESCRIPTION
   Remove Firefox an existing mimetype from current users firefox mimetypes
.EXAMPLE
   Remove-FirefoxMimeType -mimetype "application/mms"  

   Removings the mimetype 'application/mms' from the current user settings  
#>
function Remove-FirefoxMimeType {
    param(
        # string of the mimetype to remove (ex. "application/pdf")  
        [parameter(mandatory=$true)][ValidateNotNullOrEmpty()][string]$mimetype
    )
        # Get current Firefox profile folder
    $firefoxprofile = "$env:APPDATA\Mozilla\Firefox\$([regex]::match((gc "$env:APPDATA\Mozilla\Firefox\profiles.ini" | out-string),'(?im)(?<=^Default=).*\.default.*').Value.trim())"  
    if (!$firefoxprofile){
        Write-Error "Default firefox profile could not be found!" -Category InvalidOperation  
        return
    }
    # Path of handlers.json
    $handlerjson = "$firefoxprofile\handlers.json"  

    # test if json exists
    if (Test-Path $handlerjson){
        # load settings from json
        $json = ConvertFrom-Json (gc $handlerjson)
        # check if mimetype exists
        if($json.mimeTypes.$mimetype -eq $null){
            Write-Warning "Mimetype '$mimetype' is not present in firefox handlers!"  
            return
        }
        write-host "Removing mimetype '$mimetype' from 'handlers.json'." -F Green  
        # remove mimetype from list
        $json.mimeTypes.psobject.Properties.remove($mimetype)
        # write changes back to handlers.json
        $json | ConvertTo-Json -Depth 100 -Compress | sc $handlerjson -Force
    }
}

Grüße Uwe
atarjono
atarjono 20.04.2018 um 08:20:30 Uhr
Goto Top
@eriko...: jein...
wir haben 52.7.3 ESRM im Einsatz, was aber FF 59.x entpricht...
Trotzdem habe ich "nur" mimetype.rdf.

@solinardo:
Danke für das Script....ich guck mir das mal genauer an.
Wir verteilen FF erst immer nach der Qualify --> 21.08.18.
erikro
erikro 20.04.2018 um 08:43:28 Uhr
Goto Top
Seltsam. ;) Ich dachte, das wäre für alle aktuellen Versionen umgestellt worden.
colinardo
colinardo 20.04.2018 aktualisiert um 10:06:16 Uhr
Goto Top
Zur Info: Das Script oben berücksichtigt jetzt nur die handlers.json, bei Bedarf ergänze ich es dir noch für die mimetypes.rdf, das ist ja auch nur ne XML.
colinardo
colinardo 20.04.2018 aktualisiert um 10:11:58 Uhr
Goto Top
-edit 10:05- Script wurde angepasst so dass es jetzt beide Einstellungsdateien berücksichtigt (json/rdf). Das sollte für den Übergang zur nativen Policy ausreichen.
atarjono
atarjono 23.04.2018 um 15:18:19 Uhr
Goto Top
@colinadro:
Vielen lieben dank...werde ich mal ausprobieren...