骁骑
骁骑
  • 发布:2015-11-24 15:48
  • 更新:2020-08-25 16:48
  • 阅读:11511

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 关注 分享
2***@qq.com z***@qq.com shimeifang

要回复文章请先登录注册

觅安科技

觅安科技

getUserDefault方法放在uniapp的那个方法里面调用,我放在onshow里面调用,取不到值
2020-08-25 16:48
祥子888

祥子888

你好 新版本找不到方法了 怎么用
2020-05-19 09:55
3***@qq.com

3***@qq.com

新版本的SDK,在H5UniversalApp中,已经找不到mainFrame和appWindow了,该怎么调用呢?
2020-02-27 15:24
2***@qq.com

2***@qq.com

回复 逞英雄 :
你好,我也遇到这个问题了,新版本移除了mainFrame方法,您解决了吗
2019-12-25 09:06
逞英雄

逞英雄

在老版本的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

回复 conn123 :
我知道 但是我不告诉你
2019-05-21 14:54
conn123

conn123

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

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