背景: 我正在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.
任何想法为什么它不能在生产版本中工作,但仅适用于开发版本?任何想法或指针都会有很大帮助。
由于
答案 0 :(得分:1)
当构建js / css的应用程序被压缩时,它会重命名函数,变量名称以缩短它们。通常,删除压缩器认为无用的功能。通常这样做是为了减小文件的大小。
所以在你的情况下,压缩器可能已经将函数重命名为其他东西,或者如果没有从任何js文件调用它,则最不可能删除。
您可以做的是在压缩js文件后识别函数名称。尝试搜索功能体。
答案 1 :(得分:1)
控制器功能不是全局功能,因此您无法直接调用它们。
假设您的应用程序名称是APP,而您的控制器是" MainController",您可以试试这个:
webView.loadUrl("javascript:APP.app.getControllerInstances()['APP.controller.MainController'].getMeNumbers()");
另一种方法是使用路由:在控制器中,添加路由config:
routes:{
'getmenumbers': 'getMeNumbers'
}
然后:
webView.loadUrl("#getmenumbers");