SDK_骁骑
SDK_骁骑
  • 发布:2015-11-24 15:48
  • 更新:2019-09-05 18:09
  • 阅读:6960

IOS平台使用SDK集成,Native代码和HTML页面进行交互的方法

分类:5+ SDK

Native代码保存数据,HTML页面读取数据

用户可在Native代码或者HTML页面中使用NSUserDefaults类来保存数据,并在另一侧获取

页面保存数据native代码获取

JS Code

在HTML页面中调用如下代码实现数据的保存  
function SetUserDefault(key, value)  
        {  
            if (typeof value != 'undefined' && typeof key === "string")  
            {  
                var UserDefaultsClass = plus.ios.importClass("NSUserDefaults");  
                var standardUserDefaults = UserDefaultsClass.standardUserDefaults();  
                plus.ios.invoke(standardUserDefaults, "setObject:forKey:", value, key);  
                plus.ios.invoke(standardUserDefaults,"synchronize");  
            }  
        }

Objective-c Code
在native代码中调用如下方法,获取在HTML页面中保存的数据

 NSUserDefaults* pDefDefaults = [NSUserDefaults standardUserDefaults];  
    if (pDefDefaults) {  
        NSString* pString =  [pDefDefaults objectForKey:@"Input Your Key"];          
    }

Native保存数据,页面获取数据

JS Code
在HTML页面中调用如下方法,实现读取Native保存的数据

function getUserDefault(key)  
        {  
            if(typeof key != 'undefined' && typeof key === "string")  
            {  
                var UserDefaultsClass = plus.ios.importClass("NSUserDefaults");  
                var standardUserDefaults = UserDefaultsClass.standardUserDefaults();  
                return plus.ios.invoke(standardUserDefaults, "objectForKey:", key);  
            }  
            return null;  
        }

Objective-c Code
在Native代码中调用如下方法,实现保存数据

   NSUserDefaults* pDefDefaults = [NSUserDefaults standardUserDefaults];  
    if (pDefDefaults) {  
        [pDefDefaults setObject:@"Input Your Value" forKey:@"Input Your Key"];  
    }

Native代码调用当前运行应用的指定HTML页面内的JS方法

开发者可通过以下方法,在Native层找到需要交互的Webview对象,并触发该页面中的JS方法

根据webview的ID找到对应的HTML页面,并执行页面的JS方法

     PDRCoreAppFrame* pFrame = [[[[[PDRCore Instance] appManager] activeApp] appWindow] getFrameByName:@"plus/audio.html"];  
    if (pFrame)  
    {  
        // 找到指定的页面并调用stringByEvaluatingJavaScriptFromString方法调用该html页面的JS方法  
        [pFrame stringByEvaluatingJavaScriptFromString:@"InputJSFunctionNameInHtmlPage()"];  
    }

找到应用的主页面,并调用HTML中的JS方法

     PDRCoreAppFrame* pMainFrame =[[[[PDRCore Instance] appManager] activeApp] mainFrame] ;  
    if (pMainFrame) {  

        [pMainFrame stringByEvaluatingJavaScriptFromString:@"InputJSFunctionNameInHtmlPage()"];  
    }

HTML 页面调用原生方法

开发者可使用NativeJS调用已经写好的原生类的方法,也可以用NativeJS发送一个消息,由原生代码接收这个消息并处理
//IOS NJS 代码发送消息到原生层的示例
var notiClass = plus.ios.importClass("NSNotificationCenter");
notiClass.defaultCenter().postNotificationNameobject("CloseWebAPP",null);

3 关注 分享
2546863989@qq.com zhouhonghe@qq.com shimeifang

要回复文章请先登录注册

逞英雄

逞英雄

在老版本的H5UniversalApp中有 定义@property (nonatomic, readonly)PDRCoreAppWindow *appWindow;

新版本的没有啊
2019-09-05 18:09
逞英雄

逞英雄

回复 逞英雄:
No visible @interface for 'H5UniversalApp' declares the selector 'appWindow'

在H5UniversalApp中根本没有定义appWindow
2019-09-05 17:35
逞英雄

逞英雄

回复 逞英雄:
具体需要引入哪些包啊
2019-09-05 17:20
逞英雄

逞英雄

PDRCoreAppFrame* pFrame = [[[[[PDRCore Instance] appManager] activeApp] appWindow] getFrameByName:@"plus/audio.html"];
if (pFrame)
{
// 找到指定的页面并调用stringByEvaluatingJavaScriptFromString方法调用该html页面的JS方法
[pFrame stringByEvaluatingJavaScriptFromString:@"InputJSFunctionNameInHtmlPage()"];
}


这段代码报错Receiver type 'PDRCoreAppManager' for instance message is a forward declaration 已经引入了PDRCoreAppFrame
2019-09-05 17:08
zgy

zgy

回复 352565330@qq.com:
我知道 但是我不告诉你
2019-05-21 14:54
352565330@qq.com

352565330@qq.com

//IOS NJS 代码发送消息到原生层的示例
var notiClass = plus.ios.importClass("NSNotificationCenter");
notiClass.defaultCenter().postNotificationNameobject("CloseWebAPP",null);

这个通知怎么附带参数传给原生让原生获取到附带的参数
2018-03-30 10:23
shimeifang

shimeifang

都没有这个方法evaluatingJavaScriptAndFetchCommand,原生中加载了很多个页面怎么获取JS,促发JS方法?
2017-10-18 13:34
shimeifang

shimeifang

是在原生的界面中导入一个头文件#import "PDRCoreAppFrame.h"就可以了吗?麻烦说一下咯,谢谢
2017-10-11 16:06
3140905638@qq.com

3140905638@qq.com

android版的http://ask.dcloud.net.cn/question/23698
2017-06-13 09:18
我是飞鱼

我是飞鱼

android 有没有demo ,谁发下地址
2016-11-07 09:33
邹胜林

邹胜林

请问怎么获取android传过来的值呢
2016-10-19 09:50
小孔1993

小孔1993

回复 无名2015:
使用sp
2016-10-07 20:06
无名2015

无名2015

请问Android平台如何编写?谢谢
2016-09-29 09:15
SDK_骁骑

SDK_骁骑 (作者)

回复 小孔1993:
Input Your Key是随便写什么作为key值
2016-09-28 17:24
小孔1993

小孔1993

Input Your Key"是设备的UUID吗
2016-09-28 12:21
1666154330@qq.com

1666154330@qq.com

请问Android平台如何编写?谢谢
2016-07-19 11:03
Costword

Costword

最起码也要写下需要导入那些头文件吧PDRcoreappframe实例化之后为什么后面会跟那么多方法呀
2016-03-17 11:18