コードのプラグインからアプリケーションのJavaScriptスコープに戻す方法を理解できません。私はプラグインに値を送ることができます。私はphonegapビルドを使用しています。phonegapアプリからプラグインメソッドを呼び出すと、ネイティブアンドロイド関数から返されたデータは常にスコープ外です(未定義)
プラグインのJavaScript:
var exec = require('cordova/exec');
module.exports = {
getSomething: function(successCallback) { exec(successCallback,
null, "PluginName", "getSomething", []); } };
プラグインのJava:
import blah blah blah;
public class PluginName extends CordovaPlugin { public PluginName(){ }
public boolean execute(String action, JSONArray args, CallbackContext
callbackContext) throws JSONException {
if(action.equals("getSomething"))
{ this.getSomething(callbackContext); } } else { return false; }
return true; }
public void getSomething(CallbackContext callbackGetVol) { AndroidClass ac =
(AndroidClass)
this.cordova.getActivity().getSystemService(Context.SOME_SERVICE);
int data_needed = ac.androidGetMethod(parameters);
callbackGetVol.success(data_needed); callbackGetVol.error("error"); }
アプリのJavaScript:
これは素晴らしい作品:
ここではコードですPluginName.getSomething(function(data_needed) {Log("data = " + data_needed);});
しかし、ここでは、app_variableは「未定義」常にある:
var app_variable;
PluginName.getSomething(function(data_needed) {app_variable = data_needed;});
私はアプリのJavaScriptでdata_needed使用したいが、それは唯一のコールバックの体の範囲内で定義されています。
私はアプリのスコープにあるの機能(およびそのバリエーション)を通過しようとしました:
var foo = function() {
var local_variable = 0;
return {
bar: function() {
PluginName.getSomething(function(local_variable){
return local_variable;});
}
};
}();
app_variable = foo.bar();
しかし、「app_variableは、」常に「未定義」です。私は間違って何をしていますか?
私は驚いています。成功([data from java to js])の代わりにgetSomething内のvar callbackGetVolで関数sendPluginResult([data to java to js])を使用しないでください。それはあなたの問題ではないので、あなたのjavascriptに必要なデータを返信しますか?あなたは、グローバル変数の中でJavaからjavascriptに返送されるコンテンツを入れたいですか? – nyluje
@apdobajあなたはCordova/Phonegapの仕組みに関するいくつかの誤解があります。あなたがJavaを見ているなら、あなたは間違ったことをしています。 - このFAQも役立つはずです。最初に**太字の**文章を読んでください。 [Cordova/Phonegapを初めて使用するデベロッパーの主な誤り](https://github.com/jessemonroy650/top-phonegap-mistakes/blob/master/new-to-Phonegap.md) – JesseMonroy650
@nyluje、私はsendPluginResult次のようにします。PluginResult dataResult = new PluginResult(PluginResult.Status.OK、vol); dataResult.setKeepCallback(true); callbackGetVol.sendPluginResult(dataResult);結果は同じです。 phonegapビルドツールは、キーワード "static"が好きではないようです。Jesse、私はベストプラクティスを使用していないことを十分に認識していますが、実際に何をしているのかを実際に知っている誰かが書き直すような理解を持って作業を進めています。そのブログにはすでにたくさんの情報がありますが、その多くは既に見てきました。 – apdobaj