0

Android 用にラップしようとしている Phonegap/Jquery モバイル アプリがありますが、使用しているターゲット SDK は Ajax/クロスドメイン リクエストを許可していません。つまり、リクエストは最新の Android 4.0.3 (API 15) では正常に機能しますが、Android 2.3.3 (API 10) では機能しません。これは、Galaxy Tablet との互換性を保つために必要なものです。phonegap に包まれており、Firebug/Chrome Web ツールを使用できないため、実際のエラーが表示されないため、これをデバッグするのに苦労しています。私はdeveloper.android.comで運がなかった。$.mobile.allowCrossDomainPages = true; を含むhttp://jquerymobile.com/test/docs/pages/phonegap.htmlにある手順を試しました。$.support.cors = true.

これもうまくいきませんでした。誰でも私を助けてくれますか、他に何を試すべきかわかりません。ありがとう!

コードの簡単な例を次に示します。success = true を返しますが、「応答は XML 要素ではありません」というエラーが発生することに注意してください。

 return $.soapRequest({
        url: url,
        namespace: 'testns',
        returnJson: false,
        shortMethod: 'methodname',
        method: 'longmethodname',
        params: params || {},
        success: function(data) {
          if (data && data.documentElement) {
            // hits this on Android SDK 15
            if (successFn) {
              return successFn(data.documentElement);
            }
          }
          else {
            // hits this on Android SDK 10
            return fail("Response is not an XML element!");
          }
        },
        error: function(str) {
          return fail(str);
        }
4

1 に答える 1

0

phonegap プラグインで httpConnection を書き込んでみてください。それは可能です CrossDomain

httpPlugin.java

package com.android.test;

import org.apache.cordova.api.Plugin;
import org.apache.cordova.api.PluginResult;
import org.apache.cordova.api.PluginResult.Status;
import org.json.JSONArray;
import org.json.JSONException;

import android.util.Log;

import com.android.connection.HTTPConnect;

public class HttpPlugin extends Plugin {
    public final String ACTION_SEND_MESSAGE = "SendCommand";
    private HTTPConnect httpConnect;

    public HttpPlugin() {
        // TODO Auto-generated constructor stub
        httpConnect = new HTTPConnect();
    }

    @Override
    public PluginResult execute(String action, JSONArray arg1, String callbackId) {
        PluginResult result = new PluginResult(Status.INVALID_ACTION);
        if (action.equals(ACTION_SEND_MESSAGE)) {
            try {
                String message = arg1.getString(0);
                String receiveString  = httpConnect.setURL(message);
                if(receiveString == null){
                    //show error result
                    result = new PluginResult(Status.ERROR,"kakaka");
                }else{
                    Log.v("MAN", "data received");
                    result = new PluginResult(Status.OK);
                }
                result = new PluginResult(Status.OK);
            } catch (JSONException ex) {
                // TODO Auto-generated catch block
                result = new PluginResult(Status.JSON_EXCEPTION, ex.getMessage());
            }
        }
        return result;
    }
}

plugin.xml ファイル

Httpplugin.js

var Httpplugin = function () {};

Httpplugin.prototype.post = function (message, successCallback, failureCallback) {  
//  navigator.notification.alert("OMG");
    return cordova.exec(successCallback, failureCallback, 'Httpplugin', 'SendCommand', [message]);
};

PhoneGap.addConstructor(function() {
    PhoneGap.addPlugin("http", new Httpplugin());
});
于 2012-04-13T03:13:54.380 に答える