如何在Kony应用中执行逻辑,具体取决于它是在iOS,Android还是网络浏览器上运行

时间:2019-04-24 10:39:32

标签: android ios mobile cross-platform kony

我正在使用Kony创建一个全渠道应用程序,尽管它都是单个Javascript代码库,但我想根据应用程序是在iOS,Android还是网络上运行来有条件地执行一些逻辑浏览器。像这样:

if(isAndroid()) {
    //Do some stuff specific to Android.
}
else if(isIos()) {
    //Do some stuff specific to iOS.
}
else if(isWeb()) {
    //Do some stuff specific to Web.
}

2 个答案:

答案 0 :(得分:1)

Kony支持Preprocessor Directives,例如#ifdef,就像C compiler's preprocessors一样。由于Kony项目是用Javascript编写的,因此必须以特殊注释的形式添加这些语句,以免破坏Javascript语法。因此,例如#ifdef变为//#ifdef

这些指令可用于编写由应用程序内置或不由应用程序内置的代码,具体取决于主机操作系统。所以我通过写这个解决了这个问题:

var channel;
//#ifdef PLATFORM_NATIVE_IOS
channel = "ios"
//#endif
//#ifdef PLATFORM_NATIVE_ANDROID
channel = "android"
//#endif

然后根据我的channel变量的值编写其余的逻辑。

要获取可以在这些//#ifdef语句中使用的已定义宏的完整列表,可以查看在每个Kony Visualizer项目中默认创建的kony_sdk.js模块中的前几行。

enter image description here

答案 1 :(得分:1)

另一种解决方案是依靠kony.os名称空间中的kony.os.deviceInfo函数。

var deviceInfo = kony.os.deviceInfo();
var os = deviceInfo.name /*android and web*/ || deviceInfo.osname /*iOS*/;
if(os === "i-phone" || os === "i-pad"){
    //Do some stuff specific to iOS
}
else if(os === "android"){
    //Do some stuff specific to Android
}
else if(os === "thinclient"){
    //Do some stuff specific to web.
}

这也许更干净,但是结果是, all 应用程序逻辑被捆绑到每个版本中,而不管它是针对哪个平台的。因此,这只有在您希望有条件地运行的逻辑量很小的情况下才更好—可以说是因为您不想使用一堆只能在iOS上执行的逻辑来污染Android代码库,反之亦然。