【ポモドーロタイマーを作ろうVanillaJS編⑧】~GitHub Pagesでのエラー修正~

前回で一旦完成したポモドーロタイマーですが

GitHub Pagesで公開したところ、効果音が発生するタイミングで

次のようなエラーが出てしまいました。


①「ファイルが見つかりません」という内容のエラー
※エラー内容をメモしておくのを忘れてしまいました....

②Uncaught (in promise) DOMException: Failed to load because no supported source was found.

今回は①と②に対してどのように対応したかを説明していきます。

①:音源ファイルパスの変更:ローカル相対パス絶対パス


①についてはこちらの記事を参考に、ファイルパスを変更することで解決できました。

リポジトリごとの GitHub Pages でルート相対パスを使うには - Corredor


ローカル環境で開発していた際は、相対パスで記述しており
問題なく効果音が再生されておりました。


ただ、Github Pagesに上げた場合ルートが変わってしまう仕様のようで
そのままの相対パスではうまく動作しません。


相対パスだとややこしくなりそうだったので
今回は分かりやすく絶対パスで記述することにしました。


音源ファイルは既にGitHubにアップロードされているので
絶対パスはこのようになると思います。


https://{ユーザー名}.github.io/{リポジトリ名}/assets/audio/○○.mp3
※assets以下はファイル構成に応じて変更してください


②:play()メソッドはPromiseを返す。そしてブラウザサポートの有無を確認しよう。

②については、エラーと共にコンソールに
下記のULRが記載されていたので確認してみました。


developers.google.com


すると、以下のような書き方が推奨されていました。

const playPromise = audio.play();
        if(playPromise !== undefined) {
          playPromise.then(_ => {
          })
          .catch(error => {
            console.log(error);
          });
        }

コードの意味としては

if(playPromise !== undefined) 


この部分で、ブラウザがサポートしているか否かを確認し
サポートしていない場合は処理をしないようにしています。

playPromise.then(_ => {
          })
          .catch(error => {
            console.log(error);
          });


この部分では、play()メソッドがPromiseを返すので
再生が成功したか失敗したかを確認しています。

これでエラーはなくなりました。

ご丁寧にconsoleにURLを載せて頂いて....
勉強になります。


今回は以上になります!


↓↓私の師匠、もりけんさんの武骨日記。問題集、要チェック

kenjimorita.jp