

Android2.3.3(APIレベル10)のWebView内で下記のようなajaxの処理をjavascript内に記述しても  
動かないようですが、何か解決策はありますでしょうか？

[code]

     $.ajax({
                url: https://xxxxxxxx,
                type: "POST",
                timeout:10000,
                cache : false,
                data: {data:xxxx},
    　　　　　　 beforeSend: function(xhr) {
                  var credentials = $.base64.encode(basic_user+":"+basic_password);
                  xhr.setRequestHeader("Authorization", "Basic " + credentials);
                },
                success: function(result) {
                    $("#result").html(result);
                }
        })
    
[/code]

サーバーからHTMLをレスポンスで返したいと考えております。

**追記：**

Internetパーミッションは、入れております。

ログは下記のとおりです。

[code]

    Failed to load resource: the server responded with a status of 401 (Authorization Required) https://xxxxxxxxxxxxxxx
    Failed to load resource: Origin null is not allowed by Access-Control-Allow-Origin. https://xxxxxxxxxxxxxxxxx
    XMLHttpRequest cannot load https://xxxxxxxxxxxxxxx. Origin null is not allowed by Access-Control-Allow-Origin. index.html:1
    
[/code]

ベーシック認証がうまく通っていないようでしたので、ベーシック認証を一度外しましたが、  
401のエラーが出ないだけで、動きませんでした。。。


CC BY-SA 3.0
2015-02-04T04:20:01.287
5916
2015-03-08T12:23:38.603
2015-02-05T07:30:15.100
8018
8018
question
android webview ajax
APIレベル10でのWebView内でAjaxが動かない件


[Access-Control-Allow-Origin Error At Android
4.1](https://stackoverflow.com/questions/11318703/access-control-allow-origin-
error-at-android-4-1)の回答に、掲題のAndroidバージョンでも使用できる解決方法があったのでお試しいただけますか。

@johnnybgoodeさんの方法です。

[code]

    if (Build.VERSION.SDK_INT >= 16) {
        Class<?> clazz = webView.getSettings().getClass();
        Method method = null;
        try {
            method = clazz.getMethod("setAllowUniversalAccessFromFileURLs", boolean.class);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
        if (method != null) {
            try {
                method.invoke(webView.getSettings(), true);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        }
    }
    
[/code]

リフレクションによる処理なので`ProGuard`を入れておりましたら設定にご注意ください。  
try_catchはIDEに従い勝手に入れたので適宜ご変更下さい。

釈迦に説法なのですが、`Failed to load resource: Origin null is not allowed by Access-
Control-Allow-Origin`とはajaxの制約で、違うドメインなどからローカルファイルにアクセスしようとすると、`Same-Origin
Policy`によるローカルファイルへのアクセスに反するためにアクセスを拒否されて出力される...エラーらしいです。  
`Same-Origin Policy`とはなんだ、`jQuery`でも起きるらしいけどどうして？と色々、勉強させていただきました。

要するに、即席で知識を詰め込んだので動かなかったらすみません。


CC BY-SA 3.0
2015-02-06T12:07:06.997
6069
2015-02-06T12:07:06.997
2017-05-23T12:38:56.083
-1
2904
5916
answer