質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

Q&A

解決済

1回答

620閲覧

カメラ機能を使うとエラーが出る

obara-00

総合スコア13

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

0グッド

0クリップ

投稿2017/12/21 07:59

###前提・実現したいこと
MONACAで学ぶ初めてのプログラミングのP.155ページの処理で写真を読み込もうとするとエラーが出る
提供元の完成例で置き換えても同様のエラーが発生する

###発生している問題・エラーメッセージ
Refused to load the image 'content://com.android.providers.media.documents/document/imageXXX'
because it violates the following Content Security Policy directive:
"default-src * data:". Note that 'img-src' was not explicitly set,
so 'default-src' is used as a fallback.

###該当のソースコード

<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <meta http-equiv="Content-Security-Policy" content="default-src * data:; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'"> <script src="components/loader.js"></script> <link rel="stylesheet" href="components/loader.css"> <link rel="stylesheet" href="css/style.css"> <script> // 写真を撮る function takePicture() { var options = { sourceType: Camera.PictureSourceType.CAMERA, // 撮影モード saveToPhotoAlbum: true // 撮影後、写真を端末に保存 };
// カメラを起動 navigator.camera.getPicture(onSuccess, onError, options); // 撮影完了したときに呼び出される function onSuccess(imageURI){ alert(imageURI + "に保存しました"); } // 撮影キャンセルしたときに呼び出される function onError(message){ alert("エラー: " + message); } } // 写真を見る function loadPicture() { var options = { sourceType: Camera.PictureSourceType.SAVEDPHOTOALBUM // 読込モード }; // 写真を読み込む navigator.camera.getPicture(onSuccess, onError, options); // 読込完了したときに呼び出される function onSuccess(imageURI){ document.getElementById("photo").src = imageURI; } // 読込失敗したときに呼び出される function onError(message){ alert("エラー: " + message); } } </script>
</head> <body> <div id="buttons"> <button onclick="takePicture()">写真を撮る</button> <button onclick="loadPicture()">写真を見る</button> </div> <img id="photo" src=""> </body> </html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

content:スキームでエラーが出ているようなので、CSPの設定を次のように修正してみてください

修正前:

<meta http-equiv="Content-Security-Policy" content="default-src * data:; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'">

修正後

<meta http-equiv="Content-Security-Policy" content="default-src * data: content:; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'">

正確には、default-srcでなくimage-srcに入れる方が良いのですが、とりあえずこれで動作すると思います。

投稿2017/12/27 02:39

KNaito

総合スコア376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

obara-00

2018/02/14 03:53 編集

回答ありがとうございます。 今持っているスマホで動作させることができました。(Android6.x) 1世代前のSoftBankのスマホ(Android4.x)では(これに限らずほかのサンプルの一部も) 動作しませんでしたが古い機種についてはある程度の割り切りが必要でしょうね。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問