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

当构建压缩 js/css 的应用程序时,它会重命名函数、变量名称以缩短名称。它通常会删除压缩器认为无用的功能。通常这样做是为了减小文件的大小。

因此,在您的情况下,如果没有从任何 js 文件中调用它,压缩器可能已将函数重命名为其他内容,或者最不可能将其删除。

您可以做的是在压缩js文件后识别函数名称。尝试搜索函数体。

于 2013-02-15T19:49:20.897 回答
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 回答