こんにちは。
WebViewを用いたHTML+CSS+JavaScriptのハイブリッドアプリを開発しています。
HTMLはアプリ上にあるので、普通はAjaxは使えません。
サーバの.htaccessに
Header append Access-Control-Allow-Origin: * Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"
を記述すると使えるようになります。
これまではさくらのレンタルサーバを使っていて、問題なく使えてました。
サーバをさくらのVPS(CentOS6,Apache httpd)に移したところ、
iPhoneとPCのローカル環境は問題無いのですが、Android(OS依存性は未確認です。6.0は駄目でした)だけエラーになってしまいました。
$.ajaxのエラーリターンは、ステータスが0、テキストがerror、メッセージがFailed to execute 'send' on 'XMLHttpRequest':Failed to load 'https://xxx/test.php'です。
AndroidのMonacaデバッガーでテストしてみました。乗り換えたサーバでもOKでした。Androidのコーディングの問題ですね。
AndroidのManifestに追記をしてhttp通信も許可にして、http通信で行ったら、うまく行きました。
例えSSL通信であっても信頼できない証明書の場合には通信エラーになるという記事を見つけました。ただレンタルサーバのSSLも同じサーバ会社提供の無料SSL(Let’s Encrypt)を使っていました。
Android 7.0からの仕様ということなのですが、もしかしたらMonacaデバッガーのSDKは古いのかも知れません。
Let’s EncryptはAndoid7.0でいうところの信頼できない証明書なのでしょうか?
で調べてみました。
https://qiita.com/aquiq/items/db4eb8c7106f109819f0
にあるようにDNS認証すれば良いようですでしたが、
わたしの行った、certbot-autoを使った方法はHTTP認証という認証を使っていましたので
認証の問題では無さそうです。行き詰まってしまいました。別のタイトルで質問を立ち上げます。
ありがとうございました。
Andoidのソースは
Java
1 wv=(WebView)findViewById(R.id.webViewam); 2 WebSettings webSettings = wv.getSettings(); 3 Class<?> clazz = webSettings.getClass(); 4 Method method = null; 5 try { 6 method = clazz.getMethod("setAllowUniversalAccessFromFileURLs", boolean.class); 7 } catch (NoSuchMethodException e) { 8 e.printStackTrace(); 9 } 10 if (method != null) { 11 try { 12 method.invoke(webSettings, true); 13 } catch (Exception e) { 14 e.printStackTrace(); 15 } 16 } 17 webSettings.setJavaScriptEnabled(true); 18 wv.setWebChromeClient(new MyWebChromeClient()); 19 wv.setWebViewClient(new MyWebViewClient()); 20 wv.addJavascriptInterface(new JsClass(), "android"); 21 wv.loadUrl("file:///android_asset/index.html");
httpd.confは
httpd.conf
1<Directory "/var/www/html"> 2 Options -Indexes FollowSymLinks 3 AllowOverride All 4 Order allow,deny 5 Allow from all 6</Directory>
です。困っています。お助け下さい。
回答1件
あなたの回答
tips
プレビュー