Come get Firefox per utilizzare font MS TrueType per Helvetica, Times, ecc?

Sto utilizzando i caratteri TrueType (Windows) nella mia workstation Ubuntu ( dettagli ) e sono soprattutto soddisfatto del modo in cui i font vengono visualizzati, sia in applicazioni desktop che sul web (utilizzando Firefox).

Tuttavia, su alcune pagine web, come questo , i caratteri succhiano completamente:

immagine dello schermo

Ho trovato la ragione per essere Helvetica nel CSS per quel sito:

 font-family: Helvetica,Arial,Tahoma,sans-serif; 

Quando, usando Firebug, rimuovo Helvetica da quella list, usa Arial e sembra ancora di nuovo spiffy:

alt text

La mia domanda è, come rendere le pagine web che utilizzano Helvetica (o Times, o altri tipi di carattere) sembrano piacevoli automaticamente? In altre parole, come mappare le famiglie dei font di Times e Helvetica nei default di serif e sans-serif (che nel mio caso sarebbero rispettivamente Times New Roman e Arial)?

Sono interessato a qualsiasi soluzione che fa sì che Firefox utilizzi i caratteri MS TrueType in questo scenario, non import se si basa sul tweaking dei configurazioni dei font di Ubuntu o delle regole CSS personalizzate in Firefox (o qualcos'altro che non ho attualmente alcuna idea).

Aggiornamento : Ho risolto il problema completamente – questa risposta descrive ciò che wherevo fare.

Modifica : Ho completamente aggiornato questa risposta dopo avere ottenuto alcuni suggerimenti da parte di un collega.

Ecco cosa ho inserito in /etc/fonts/local.conf (all'interno <fontconfig> ):

 <!-- Replace Helvetica with Arial --> <match target="pattern"> <test qual="any" name="family"> <string>Helvetica</string> </test> <edit name="family" mode="assign" binding="strong"> <string>Arial</string> </edit> </match> 

Allo stesso modo per Times -> Times New Roman. (Vedi qui il mio locale local.conf .) La chiave era quella di utilizzare binding = "strong" per l'elemento <edit> . (Inoltre, usando la modalità "assign_replace" invece di "assegnare" provoca qualcosa di simile, tranne che allora è troppo aggressivo: anche Verdana viene sostituito con Arial).

Le modifiche delle configurazioni dei font sono efficaci immediatamente. Oltre a testare in Firefox, puoi verificare che funzioni come questo:

 $ fc-match helvetica Arial.ttf: "Arial" "Normal" 

Se si esegue problemi, il miglior aiuto è vicino: man fonts-conf . (Anche se anche con la documentazione, il funzionamento del sistema di font mi è sembrato un po 'complicato o ingombrante per me). È anche ansible provare a "eseguire il debug" di quello che sta succedendo con un command come:

 FC_DEBUG=4 fc-match helvetica 

Inoltre, FC_DEBUG=1024 fc-match helvetica mostra l'elenco dei file di configuration che influenzano la corrispondenza dei caratteri.

Ho avuto un problema simile in Opera, la soluzione alla quale è stata distriggersre "X Font Core" nella configuration. Suggerisco di vedere se c'è un'opzione simile in Firefox.

Altre opzioni:

  • Verifica che non hai sicuramente un font denominato "Helvetica" installato, cose simili mi sono accadute alcune volte. IIRC i font problema erano nelle cartelle chiamate 100dpi e 75dpi nella cartella font di sistema ( /usr/local/share/fonts penso). Ho appena spostato quelle cartelle da lì interamente.
  • Controllare le impostazioni predefinite in Sistema> Preferenze> Aspetto> Caratteri .
  • Controllare i valori predefiniti di Firefox in Preferenze> Contenuti .

Se si apportno modifiche alle cartelle principali, è necessario ribuild la cache di caratteri con:

 sudo fc-cache -f -v 

Greasemonkey sarà una soluzione per la tua domanda. Installare questo addon e puoi personalizzare le pagine web e modificare i caratteri.

e uno script di esempio che modifica il font a Helvita

 // ==UserScript== // @name Google Reader Font in Helvetica and enlarged // @version 1.0 // @creator Joe // @description Changes the font family and size from Google Reader page // @namespace userscripts.org // @include https://www.google.com/reader/* // @include http://www.google.com/reader/* // ==/UserScript== function addGlobalStyle(css) { var head, style; head = document.getElementsByTagName('head')[0]; if (!head) { return; } style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = css; head.appendChild(style); } addGlobalStyle('.entry-body{font-family:Helvetica;font-size:110%;line-height:150%;}'); addGlobalStyle('A.entry-title-link {font-family:Helvetica;font-size: 20px;}'); 

Mi chiedo solo, potresti usare font locali e @font faccia css?

Devi aggiungere un "Grant" a quello script in qualsiasi modo …

Greasemonkey 1.0 aggiunge un particolare imperativo del block dei metadati: @grant.

 If a script does not specify any @grant values, Greasemonkey 1.0-1.9 will attempt to auto-detect the right settings. From GreaseMonkey 2.0, @grant none is assumed by default, if no other values are specified.[1] If a script specifies any values (or they were auto detected), then it will be provided with only those API methods that it declares. The valid values are unsafeWindow, and the names of those GM_ prefixed values that you wish your script to be granted access to. Otherwise the script will be granted no special API privileges, and thus run without the security constraints Greasemonkey scripts have traditionally had. If you want your script to operate in this mode, you should explicitly declare @grant none. 

Esempi

È comune per gli script (oltre la metà dell'ultimo count) per non utilizzare affatto alcuna API specifica. Per tali script, esplicitamente chiedendo di non essere concessi privilegi speciali significa che lo script verrà eseguito direttamente nella pagina dei contenuti. Ciò significa che nessun sandbox di sicurezza, e nessuna delle sue limitazioni, quindi l'accesso alle variables nella pagina funziona solo, le funzioni di chiamata e la lettura dei risultati funziona semplicemente. Per farlo, semplicemente:

 // ==UserScript== // @name Grant None Example (can be omitted since GM 2.0) // @include http* // @grant none // ==/UserScript== console.log('This script grants no special privileges, so it runs without security limitations.'); 

Se utilizzi una delle API di Greasemonkey, devi esplicitamente chiedere che sia concesso al tuo script:

 // ==UserScript== // @name Grant Some Example // @include http* // @grant GM_getValue // @grant GM_setValue // ==/UserScript== var counter = GM_getValue('counter', 0); console.log('This script has been run ' + counter + ' times.'); GM_setValue('counter', ++counter); 

In questo caso, lo script richiede l'accesso a GM_getValue e GM_setValue , uno per ciascuna linea di @grant . Specificare il nome di qualsiasi API Greasemonkey per get l'accesso a esso. (Tutti gli script sempre ottengono GM_info senza richiederlo specificamente.) Temporaneamente, questo functionrebbe anche:

 // ==UserScript== // @name Grant Legacy Example // @include http* // ==/UserScript== var counter = GM_getValue('counter', 0); console.log('This script has been run ' + counter + ' times.'); GM_setValue('counter', ++counter); 

Questo esempio funziona in Greasemonkey versione 1.0. Quando non esistono linee di @grant, Greasemonkey tenta di rilevare quali API vengono utilizzate e agire come se fosse stata specificata quella linea. Questo rilevamento potrebbe non riuscire in alcuni casi, specialmente quando si utilizza eval() .

Tutti gli script scritti prima di @grant dovrebbero continuare a funzionare a causa di questo, ma dovresti cambiare i tuoi script per specificare @grant alla tua prima comodità, in modo da non rompersi in futuro. Livello di compatibilità

Molte delle API Greasemonkey sono state duplicate da standard web come DOM Storage. Se si aspetta solo che il tuo script funzioni in un singolo dominio, puoi utilizzare @grant none e la sua maggiore compatibilità senza immediata disfunction. È sufficiente utilizzare una libreria @require per emulare API Greasemonkey con funzionalità del browser standard:

 // ==UserScript== // @name Grant None Example, With Shim // @include http://www.example.com/* // @grant none // @require https://gist.githubusercontent.com/arantius/3123124/raw/grant-none-shim.js // ==/UserScript== var counter = GM_getValue('counter', 0); console.log('This script has been run ' + counter + ' times.'); GM_setValue('counter', ++counter); 

Questo script functionrà in modo analogo all'esempio precedente, tranne che la sovvenzione none shim sta fornendo emulazione API con funzionalità di browser standard. Quando lo strato di compatibilità dello shim funziona bene per il tuo script, questo è il migliore di entrambi i mondi. Scopo

Nella concessione nessuno caso, lo script utente ha ancora un proprio ambito globale, distinto dall'ambito globale della pagina dei contenuti. Ciò significa che un livello superiore var x = 1; non sarà visibile nell'ambito del contenuto e quindi non romperà la pagina (ovvero se dipende da una variabile x avente un valore diverso). Per scrivere valori nell'ambito del contenuto, fare window.x = 1; .

Se si @require una versione di jQuery, verrà assegnato implicitamente alla window.$ e window.jQuery . Se la pagina in esecuzione dipende da una diversa versione di jQuery, questa potrebbe rompere la pagina. Per aggirare questo problema, dovunque si trovi al livello superiore dello script, fai:

 this.$ = this.jQuery = jQuery.noConflict(true); 

Questo codice salva un riferimento jQuery (in questo, l'ambito globale dello script durante l'esecuzione nella modalità di concessione nessuna), rimuovendolo dalla window (l'ambito globale del contenuto) e ripristinando tutto ciò che è stato originariamente memorizzato.