phantomjs + веб-шрифты + загрузчик шрифтов

Я бегу фантомы в пределах node.js окружающая среда, и это идет хорошо. В настоящее время я использую только локальные шрифты, но хочу, чтобы веб-шрифты Google работали с phantomjs.

Существуют различные противоречивые и запутанные сообщения о том, можно ли и как сделать веб-шрифты работать с phantomjs, Есть такие статьи, которые содержат устаревшую информацию с неработающими ссылками. И такие сообщения, которые предполагают, что phantomjs 2.0 будет или может поддерживать веб-шрифты, другие говорят, что это не так, но 2.0.1 будет. В этом посте есть предположение, что веб-шрифты работают в 2.0.

Я перепробовал множество вариантов, в том числе с бинарниками phantomjs 2.0 и 2.0.1, но не могу заставить его работать. Может быть, я загружаю веб-шрифты в моем js, используя загрузчик веб-шрифтов, используя что-то из следующего:

WebFont.load({
    google: {
        families: ['Droid Sans', 'Droid Serif']
    },
    loading: function() { console.log('loading'); },
    active: function() {
        console.log('active');
        // hooray!  can do stuff...
    },
    inactive: function() { console.log('inactive'); },
    fontloading: function(familyName, fvd) { console.log('fontloading', familyName, fvd); },
    fontactive: function(familyName, fvd) { console.log('fontactive', familyName, fvd); },
    fontinactive: function(familyName, fvd) { console.log('fontinactive', familyName, fvd); }
});

Но я всегда достигаю inactive ветвь, поэтому загрузка шрифтов никогда не бывает успешной... даже если тот же код работает в браузере active ветка.

В документации по загрузчику шрифтов написано:

Если Web Font Loader определяет, что текущий браузер не поддерживает @font-face, inactive событие будет запущено.

Я подозреваю, что загрузчик веб-шрифтов действительно определяет, что браузер (phantomjs) не поддерживает это, поэтому всегда достигает inactive,

Кто-нибудь получил phantomjs + веб-шрифты + загрузчик веб-шрифтов?

2 ответа

Какой UA вы используете? Я думаю, что Web Font Loader использует UA для определения поддержки. Попробуйте UA с Chrome 46 и посмотрите, работает ли он.

var webPage = require('webpage');
var page = webPage.create();
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36';

Не помечать как правильный, просто расширив приведенный выше ответ. Поскольку все обертки phantomjs (такие как phridge и phantomjs-node) в основном порождают новый процесс phantomjs, результат должен быть одинаковым при запуске из контекста nodejs.

phatomjs-webfonts.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>PhantomJS WebFontsTest</title>
</head>
<body>
<script src="https://ajax.googleapis.com/ajax/libs/webfont/1.5.18/webfont.js"></script>
<script>
    WebFont.load({
        google: {
            families: ['Droid Sans', 'Droid Serif']
        },
        loading:  function(){ console.log('WebFonts loading'); },
        active:   function(){ console.log('WebFonts active'); },
        inactive: function(){ console.log('WebFonts inactive'); }
    });
</script>   
</body>
</html>

phantomjs-webfonts.js:

var page = require('webpage').create();

page.settings.userAgent = 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36';

page.onConsoleMessage = function(msg, lineNum, sourceId) {
  console.log('Console: ' + msg);
};

page.open('http://<server-address>/phantomjs-webfonts.html', function(status) {
  console.log("Loading status: " + status);
});

Команда:

phantomjs phantomjs-webfonts.js

Выход:

Console: WebFonts loading
Console: WebFonts active
Loading status: success
Другие вопросы по тегам