【Google VR View】ローカル環境実行のエラーについて
Q&A
Closed
初めまして。
エンジニアではないのですが、独学でHTML,CSS,javascriptの知識はほんの少しだけあります。
現在、360度画像をページに挿入したいと思いローカル環境で作成している途中なのですがエラーが出てしまい悩んでいます。
【作業状況】
・マシン:MacBook Air(10.15.5 ,メモリ8G ,)
・ブラウザ:Google Chrome(83.0.4103.116)
・テキストエディタ:atom(1.48.0)
・Google VR viewのスクリプトをHTML内で読み込み
・<div id="vrview"></div>を配置済み
・jsは別ファイルを作成してHTMLから読み込み
【フォルダの階層関係】
∟HTMLファイル
∟CSSファイル
∟JavaScriptファイル
∟images(画像ファイル)
∟sample.jpg
他の方々のQiita記事や他サイトも調べて、ローカル環境で自分でコードを書いてみたのですが、用意した360度画像(4096×2048 , jpg形式)を読み込めず、エラーになってしまいます。
原因を突き止めるべく以下の手順を行ってみたのですが、解決には至りませんでした。
①他の方の360度画像に関するQiita記事内に記載のあるURL(https://〜 で始まるもの)を試しにjsの「image:'',」の中に入れてみる
→二つとも表示された
→サーバーにアップロードした画像は読み込める
②自分で用意したサンプル画像をWordPressなどにアップロードしてそのURL (https://noriharu.files.wordpress.com/2020/07/sample.jpg) を「image:'',」の中に入れてみる
→エラー
→URLが正しくない?
→WordPressっていうのが原因?
③<img>タグを記述してサンプル画像を読み込んでみる
→画像は表示された
→パスは間違っていない
→Google VR viewはローカルファイルは読み込まない?
①〜③の工程を経て以下の疑問に辿り着いたのですが、これは正しいのでしょうか。
・Google VR viewはローカルファイルの画像は読み込めない?
・新しくサーバーを契約して画像をアップロードする必要がある?
ローカルのフォルダから360度画像をGoogle VR viewで読み込む方法が何かあれば知りたいと思うのですが、そもそもそれは可能なのでしょうか。
2020年7月19日追記
自己解決しました!
結論から言うと、原因はやはり「CORS」の問題でした。
Xserverが10日間無料キャンペーンを実施していたので、試しにサーバーを契約して、ローカル環境ではなく自分のサーバー上にファイルをアップロードして試してみたところ、エラーが起きました。(ここまでは本当に「はあ?」でした)
そこでChromeのデベロッパーツールのコンソールを確認してみたところ、以下のようなエラー文を確認しました。
Access to XMLHttpRequest at 'https://xs624955.xsrv.jp/sample.jpg' from origin 'https://storage.googleapis.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
調べまくっていると、どうやらサーバー側の設定の問題であることが分かりまして、Xserverの「.htaccsess」を直接編集してサーバーの挙動を制御しないといけないことが判明しました。
ネットに転がっていたソースコード?みたいなものに少し手を加えて実行してみると、見事GoogleVRviewで用意した画像が表示されるようになりました。
CDNを用いてVRviewを使用しようとしても、結局のところ自動的に<iframe>が用いられており、その際にGoogleapiのところでCORSポリシーに反するということでエラーになってしまっていました。(説明が下手ですみません…)
※実際に「.htaccess」に記述したものです↓
<IfModule mod_headers.c>
<FilesMatch "\.(jpg|mp4)$">
Header append Access-Control-Allow-Origin: "https://storage.googleapis.com"
</FilesMatch>
</IfModule>
もしかするとGoogleVRviewに関する記事を公開されていた方々は、自身でこのサーバー設定を終えられているか、すでにデフォルト設定でこの問題はクリアしていたのかもしれません。(躓くことすらなかったみたいな。)
なんにせよ問題が解決してハッピーです。今回はかなり勉強になりました。
コメントを寄せてくれた方々には感謝しておりますし、同じような悩みで躓いてしまっている方には少しでもこの記事が参考になればと思っております。