1

背景: Android デバイスの webview で sencha モバイル サイトをロードし、以下のように Java クラスから sencha コントローラー内で宣言された関数にアクセスしています。

webView.loadUrl("javascript:getMeNumbers();");

この関数はコントローラー内で宣言されています

getMeNumbers : function(value) {
  console.log('Controller: Function called >> getMeNumbers');
}

問題 : このアプリケーションを開発モードで実行しているときに、このコントローラー関数を Java クラスから呼び出すことができます。しかし、プロダクション ビルドを作成し、このコントローラー関数を Java クラスから呼び出そうとするとすぐに、エラーが発生し始めます。

'ReferenceError: Can't find variable: getMeNumbers at undefined:1''` in the console.

製品版では動作せず、開発版でしか動作しないのはなぜですか? アイデアや指針は大いに役立ちます。

ありがとう

4

2 に答える 2

1

コントローラー関数はグローバル関数ではないため、直接呼び出すことはできません。

アプリケーション名がAPPで、コントローラーが「MainController」であると仮定すると、これを試すことができます:

webView.loadUrl("javascript:APP.app.getControllerInstances()['APP.controller.MainController'].getMeNumbers()");

別の方法はルートを使用することです: コントローラーで、ルート構成を追加します。

routes:{
  'getmenumbers': 'getMeNumbers'
}

その後:

webView.loadUrl("#getmenumbers");
于 2013-02-16T06:43:13.903 に答える
1

js/css が圧縮されているアプリをビルドすると、関数名、変数名が短縮された名前に変更されます。通常、コンプレッサーが役に立たないと考える機能を削除します。これは通常、ファイルのサイズを縮小するために行われます。

したがって、あなたの場合も、コンプレッサーは関数の名前を別のものに変更したか、どのjsファイルからも呼び出されていない場合はおそらく削除された可能性があります。

できることは、jsファイルを圧縮した後に関数名を特定することです。関数本体を検索してみてください。

于 2013-02-15T19:49:20.897 に答える