Como fazer com que o Firefox use fontes MS TrueType para Helvetica, Times, etc?

6

Estou usando fontes TrueType (Windows) na minha estação de trabalho do Ubuntu ( detalhes ), e estou muito feliz com a aparência das fontes, tanto em aplicativos de desktop quanto na Web (usando o Firefox).

No entanto, em algumas páginas da Web, assim um , as fontes são completamente ruins:

EuencontreiomotivoparaserHelveticanoCSSdessesite:

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

Quando,usandooFirebug,euremovoHelveticadalista,eleusaoArialeficatodobonitinhodenovo:

A minha pergunta é: como tornar as páginas da web que usam Helvetica (ou Times, ou outras fontes) com aparência legal? Em outras palavras, como mapear as famílias de fontes Times e Helvetica para os padrões serif e sans-serif (que no meu caso seriam Times New Roman e Arial, respectivamente)?

Estou interessado em qualquer solução que faça com que o Firefox use as fontes MS TrueType neste cenário, não importa se é baseado em configurações de fontes do Ubuntu ou regras CSS personalizadas no Firefox (ou outra coisa sobre a qual não tenho nenhuma pista) .

Atualizar : Eu agora tenho o problema totalmente resolvido - esta resposta descreve o que eu precisava fazer.

    
por Jonik 12.10.2009 / 11:33

5 respostas

6

Editar : atualizei completamente essa resposta depois de receber alguns conselhos inovadores de um colega.

Aqui está o que eu inseri em /etc/fonts/local.conf (dentro do elemento <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>    

Da mesma forma para Times - > Times New Roman. (Veja meu total local.conf aqui .) A chave era usar binding="strong" para o elemento <edit> . (Além disso, usar o modo "assign_replace" em vez de "assign" causa algo semelhante, exceto que é muito agressivo: também o Verdana é substituído pelo Arial).

As alterações nas configurações de fonte são efetivas imediatamente. Além de testar no Firefox, você pode verificar se funciona assim:

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

Se você tiver problemas, a melhor ajuda está próxima: man fonts-conf . (Embora, mesmo com a documentação, o funcionamento do sistema de fontes parecesse um pouco complicado ou complicado para mim.) Você também pode tentar "depurar" o que realmente está acontecendo usando um comando como:

FC_DEBUG=4 fc-match helvetica

Além disso, FC_DEBUG=1024 fc-match helvetica mostra a lista de arquivos de configuração que afetam a correspondência de fontes.

    
por 12.10.2009 / 11:59
1

Eu tive um problema semelhante no Opera, a solução para a qual era desativar "Core X Fonts" na configuração. Eu sugiro ver se há uma opção semelhante no Firefox.

Outras opções:

  • Verifique se você definitivamente não tem uma fonte chamada "Helvetica" instalada, coisas semelhantes aconteceram comigo algumas vezes. IIRC as fontes problemáticas estavam em pastas chamadas 100dpi e 75dpi na pasta de fontes do sistema ( /usr/local/share/fonts eu acho). Acabei de transferir essas pastas de lá totalmente.
  • Verifique os padrões em Sistema > Preferências > Aparência > Fontes .
  • Verifique os padrões do Firefox em Preferências > Conteúdo .

Se você fizer alterações nas pastas principais, precisará reconstruir o cache de fontes com:

sudo fc-cache -f -v
    
por 12.10.2009 / 16:55
0

Greasemonkey será uma das soluções para sua pergunta. Instale este addon e você pode personalizar as páginas da web e alterar as fontes.

e um script de exemplo que muda a fonte para 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;}');
    
por 12.10.2009 / 11:39
0

Só querendo saber, você poderia usar fontes locais e @font face css?

    
por 12.02.2010 / 08:51
0

Você precisa adicionar um "Grant" a esse script de qualquer maneira ...

O Greasemonkey 1.0 adiciona um imperativo especial do Bloco de Metadados: @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.

Exemplos

É comum que scripts (mais da metade quando contados pela última vez) não usem nenhuma API especial. Para tais scripts, pedir explicitamente que não sejam concedidos privilégios especiais significa que o script será executado diretamente na página de conteúdo. Isso significa que não há sandbox de segurança e nenhuma de suas limitações, portanto, acessar variáveis na página simplesmente funciona, chamar funções e ler seus resultados também funciona. Para fazer isso, simplesmente:

// ==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 você usar uma das APIs do Greasemonkey, deverá pedir explicitamente que ela seja concedida ao seu 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);

Nesse caso, o script está pedindo para ter acesso aos dois GM_getValue e GM_setValue , um em cada linha @grant . Especifique o nome de qualquer API do Greasemonkey para receber acesso a ele. (Todos os scripts sempre obtêm GM_info sem solicitá-lo especificamente.) Temporariamente, isso também funcionaria:

// ==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);

Este exemplo funcionará na versão 1.0 do Greasemonkey. Quando não há linhas @grant, o Greasemonkey tenta detectar quais APIs estão sendo usadas e age como se essas linhas @grant tivessem sido especificadas. Essa detecção pode falhar em certos casos, especialmente quando eval() é usado.

Todos os scripts escritos antes de @grant devem continuar a funcionar por causa disso, mas você deve alterar seus scripts para especificar @grant assim que eles não forem violados no futuro. Camada de Compatibilidade

Muitas das APIs do Greasemonkey foram duplicadas pelos padrões da web, como o DOM Storage. Se você espera que seu script opere apenas em um único domínio, você pode usar @grant none e sua compatibilidade aumentada sem nenhum inconveniente imediatamente. Basta usar uma biblioteca @require para emular as APIs do Greasemonkey com recursos de navegador agora padrão:

// ==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);

Este script funcionará da mesma forma que o exemplo acima, exceto que o grant none shim está fornecendo emulação de API com recursos padrão do navegador. Quando a camada de compatibilidade do shim funciona bem o suficiente para o seu script, esse é o melhor dos dois mundos. Âmbito

Na concessão de nenhum caso, o script de usuário ainda possui seu próprio escopo global, distinto do escopo global da página de conteúdo. Isso significa que um var x = 1; de nível superior não estará visível no escopo do conteúdo e, portanto, não quebrará a página (isto é, se depender de uma variável x com um valor diferente). Para gravar valores no escopo do conteúdo, window.x = 1; .

Se você usar @require de uma versão do jQuery, ela será atribuída implicitamente a window.$ e window.jQuery . Se a página que você executar depender de uma versão diferente do jQuery, isso poderá quebrar a página. Para contornar este problema, em qualquer lugar no nível superior do seu script, faça o seguinte:

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

Este código salvará uma referência jQuery (para isso, o escopo global do script quando executado no modo nenhum de concessão), enquanto o remove da janela (o escopo global do conteúdo) e restaura qualquer coisa originalmente armazenada lá.

    
por 21.07.2015 / 06:48