如何重写starth5app(JsApiHandler4StartApp)这个插件

为什么要重写呢?因为使用它打开的页面在DFNavigationController中,会产生一些问题。

1.如何在前端不改任何代码的情况下,直接使starth5app从调用JsApiHandler4StartApp改为调用自己写的插件JsApiHandleriOSDIYStartApp ?

答:在内置插件列表Poseidon-Extra-Config.plist中,由原来的

改为

即可。

2.当然调试的时候可以这样,保险的做法是新写一个插件,前端调用参数不变,客户端来进行参数的处理。

前端传过来的跳转参数是:


- (void)handler:(NSDictionary *)data
        context:(PSDContext *)context
       callback:(PSDJsApiResponseCallbackBlock)callback
{
}


打印data
Printing description of data:
{
    appId = 20120329;
    param =     {
        param =         {
        };
        readTitle = 0;
        url = "/www/home.html";
    };
}

原生的

- (UIViewController *)createH5ViewControllerWithNebulaApp:(NSDictionary *)params;

需要的参数格式为:

@{@"appid":data[@"appId"],
  @"url": data[@"param"][@"url"],
  @"param":param,
 }

因此把前端传过来的参数中的appId直接放到param里面即可。

完整的代码:

//
//  JsApiHandleriOSDIYStartApp.h
//
//
//  Created by YYYFC on 2021/7/8.
//  Copyright © 2021 Alibaba. All rights reserved.
//

#import <NebulaPoseidon/NebulaPoseidon.h>

NS_ASSUME_NONNULL_BEGIN

@interface JsApiHandleriOSDIYStartApp : PSDJsApiHandler

@end

NS_ASSUME_NONNULL_END
//
//  JsApiHandleriOSDIYStartApp.m
//
//
//  Created by YYYFC on 2021/7/8.
//  Copyright © 2021 Alibaba. All rights reserved.
//

#import "JsApiHandleriOSDIYStartApp.h"

@implementation JsApiHandleriOSDIYStartApp
- (void)handler:(NSDictionary *)data
        context:(PSDContext *)context
       callback:(PSDJsApiResponseCallbackBlock)callback
{
    [super handler:data context:context callback:callback];
    
    
    //获取正确层级的导航控制器
    UIWindow * window = [[UIApplication sharedApplication] keyWindow];
  
    DFNavigationController *dfNav = window.rootViewController;
   
    UITabBarController *tabvc = dfNav.viewControllers[0];
    
    UINavigationController *navc = tabvc.viewControllers[tabvc.selectedIndex];
    

    
    
    //组装参数
    NSDictionary *param = data[@"param"][@"param"];
    NSDictionary *cParam = @{@"appId":data[@"appId"],
                             @"url": data[@"param"][@"url"],
                             @"param":param,
                            };
    
    NSMutableDictionary *dict = [[NSMutableDictionary alloc]initWithDictionary:cParam];
    [dict setObject:@NO forKey:@"showOptionMenu"];
    [dict setObject:@NO forKey:@"readTitle"];
    [dict setObject:@YES forKey:@"showProgress"];
    
    //创建h5容器并跳转
    [[MPNebulaAdapterInterface shareInstance]requestNebulaAppsWithParams:@{cParam[@"appId"]:@"0"} finish:^(NSDictionary *data, NSError *error) {
        
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                
                H5WebViewController *webVc = [[MPNebulaAdapterInterface shareInstance] createH5ViewControllerWithNebulaApp:dict];
                
                [navc pushViewController:webVc animated:YES];
                
            });
            

    }];

    callback(@{@"result":@"1"});
}
@end

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值