May 03, 2019

Firebase にアップロードしたWebフォントを Blogger で読み込む

event_noteMay 03, 2019

ブログで Webフォント・音声・JS・CSS などを読み込みたいときのファイル置き場として...

Google のアカウントがあればはじめることのできる Firebase の ホスティング サービスを使って、アップロードした Webフォント 等を Blogger 側から読み込むときにはfirebase.jsonの設定を書き換える必要がありました。

Firebase Hosting の使い方については、前回の記事をご覧いただければと思います。

また、このページでは、パブリックドメインのフリーフォントであるmilkjf16 Boldを Firebase にアップして使わせてもらってます。

Access-Control-Allow-Origin を設定しないと Webフォント を Firebase から読み込めない

firebase initしたときに Firebase の作業用フォルダに作成されたfirebase.jsonAccess-Control-Allow-Originを設定しないと Blogger などの外部のサイトから Webフォントを読み込むことができませんでした。

firebase.json を書き換え

firebase.jsonファイルをテキストエディタなどで開くと、以下のようになっていると思います。

firebase.json [書き換え前]
{
  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  }
}

これを以下のように書き換えてAccess-Control-Allow-Originを設定します。

firebase.json [書き換え後]
{
  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "headers": [ {
      "source" : "**/*",
      "headers" : [ {
        "key" : "Access-Control-Allow-Origin",
        "value" : "*"
      } ]
    } ]
  }
}

keyの下のvalue"*"ではなく、"https://www.example.com"のような値にすると、https://www.example.com のみに 読み込みを許可する設定となります。
特定のサイトのみに許可することで、Hosting の データ転送量節約 に多少はつながるかも。

書き換えが終わったら、firebase deployをして設定を反映させましょう。

補足:Access-Control-Allow-Origin の有無が問題にならないケース

<audio src="https://example.com/hoge.mp3"></audio>のようにHTMLタグsrchref属性からリソースを読み込む場合は、Access-Control-Allow-Originが許可されていてもいなくても、関係なしに 外部サイトのファイルを読み込むことができました。

Access-Control-Allow-Origin の有無が問題 となるのは CSS や JS のスクリプト の文中で、自分のドメイン外のリソースを参照して 読み込もうとする場合でした。

Related Posts

Webフォントとして利用できる.woff .woff2 .ttf .otf といった拡張子のフォントについて、 Base64エンコードして、スタイルシートに直接埋め込む方法について見ていきます。