open source
This commit is contained in:
@@ -0,0 +1,176 @@
|
||||
#import "ViewController.h"
|
||||
#import "conchConfig.h"
|
||||
#import "LayaWKWebview.h"
|
||||
|
||||
@implementation ViewController
|
||||
{
|
||||
LayaWKWebview* _layaWKWebview;
|
||||
NSString* _scriptsPath;
|
||||
BOOL _addScriptMessageHandler;
|
||||
}
|
||||
-(id)init
|
||||
{
|
||||
self = [super init];
|
||||
if( self != nil )
|
||||
{
|
||||
_addScriptMessageHandler = NO;
|
||||
return self;
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
- (void)viewDidLoad
|
||||
{
|
||||
[super viewDidLoad];
|
||||
[[UIApplication sharedApplication] setIdleTimerDisabled:YES];
|
||||
[conchConfig GetInstance];
|
||||
WKWebViewConfiguration* config = [[WKWebViewConfiguration alloc]init];
|
||||
config.preferences.javaScriptEnabled=true;
|
||||
config.preferences.javaScriptCanOpenWindowsAutomatically = true;
|
||||
config.userContentController = [[WKUserContentController alloc] init];
|
||||
|
||||
NSString* scriptsPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/scripts/init.js"];
|
||||
NSString* iniScript = [NSString stringWithContentsOfFile:scriptsPath encoding:NSUTF8StringEncoding error:nil];
|
||||
WKUserScript *script = [[WKUserScript alloc] initWithSource:iniScript injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES];
|
||||
[config.userContentController addUserScript:script];
|
||||
|
||||
WKWebView* webview = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:config];
|
||||
webview.allowsBackForwardNavigationGestures = YES;
|
||||
webview.UIDelegate = self;
|
||||
webview.navigationDelegate = self;
|
||||
|
||||
webview.scrollView.bounces = false;
|
||||
webview.scrollView.bouncesZoom = false;
|
||||
|
||||
if (@available(iOS 11.0, *))
|
||||
{
|
||||
webview.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
|
||||
}
|
||||
|
||||
[self setNeedsStatusBarAppearanceUpdate];
|
||||
[self prefersStatusBarHidden];
|
||||
|
||||
_layaWKWebview = [[LayaWKWebview alloc] initWithWebview:webview url:[conchConfig GetInstance]->m_sUrl hostPort:[conchConfig GetInstance]->m_nHostPort];
|
||||
[self.view addSubview:_layaWKWebview.webview];
|
||||
}
|
||||
- (void)didReceiveMemoryWarning
|
||||
{
|
||||
[super didReceiveMemoryWarning];
|
||||
}
|
||||
//-------------------------------------------------------------------------------
|
||||
-(NSUInteger)supportedInterfaceOrientations
|
||||
{
|
||||
/*
|
||||
UIInterfaceOrientationMaskPortrait, ===2
|
||||
UIInterfaceOrientationMaskPortraitUpsideDown, ===4
|
||||
UIInterfaceOrientationMaskLandscapeLeft, ===8
|
||||
UIInterfaceOrientationMaskLandscapeRight, ===16
|
||||
*/
|
||||
return [conchConfig GetInstance]->m_nOrientationType;
|
||||
}
|
||||
//-------------------------------------------------------------------------------
|
||||
- (BOOL)prefersStatusBarHidden
|
||||
{
|
||||
return YES;
|
||||
}
|
||||
- (BOOL)shouldAutorotate
|
||||
{
|
||||
return YES;//支持转屏
|
||||
}
|
||||
- (void)viewWillAppear:(BOOL)animated
|
||||
{
|
||||
[super viewWillAppear:animated];
|
||||
if (!_addScriptMessageHandler)
|
||||
{
|
||||
[_layaWKWebview.webview.configuration.userContentController addScriptMessageHandler:self name:@"reflection"];
|
||||
[_layaWKWebview.webview.configuration.userContentController addScriptMessageHandler:self name:@"log"];
|
||||
_addScriptMessageHandler = YES;
|
||||
}
|
||||
}
|
||||
- (void)viewWillDisppear:(BOOL)animated
|
||||
{
|
||||
[super viewWillDisappear:animated];
|
||||
if (_addScriptMessageHandler)
|
||||
{
|
||||
[_layaWKWebview.webview.configuration.userContentController removeScriptMessageHandlerForName:@"reflection"];
|
||||
[_layaWKWebview.webview.configuration.userContentController removeScriptMessageHandlerForName:@"log"];
|
||||
_addScriptMessageHandler = NO;
|
||||
}
|
||||
}
|
||||
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message
|
||||
{
|
||||
if (![message.body isKindOfClass:NSString.class])
|
||||
{
|
||||
return;
|
||||
}
|
||||
NSString* data = message.body;
|
||||
if (data == nil)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//NSLog(@"JS-->OC %@",message.body);
|
||||
|
||||
if ([message.name isEqualToString:@"log"])
|
||||
{
|
||||
NSLog(@"JSLog:%@", data);
|
||||
}
|
||||
else if ([message.name isEqualToString:@"reflection"])
|
||||
{
|
||||
NSError* error = nil;
|
||||
NSData* jsonData = [message.body dataUsingEncoding:NSUTF8StringEncoding];
|
||||
NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
|
||||
NSNumber* ID = [dict objectForKey:@"id"];
|
||||
NSString* className = [dict objectForKey:@"className"];
|
||||
NSString* methodName = [dict objectForKey:@"methodName"];
|
||||
NSString* param = [dict objectForKey:@"param"];
|
||||
[_layaWKWebview callMethod:ID.intValue className:className methodName:methodName param:param];
|
||||
}
|
||||
}
|
||||
-(void) callbackToJS:(NSString*)name data:(NSString*)jsonParam
|
||||
{
|
||||
NSString* js = [NSString stringWithFormat:@"window.wkbridge.callback('%@','%@');",name, jsonParam];
|
||||
[_layaWKWebview.webview evaluateJavaScript:js completionHandler:^(id _Nullable response, NSError * _Nullable error) {
|
||||
if (response || error)
|
||||
{
|
||||
NSLog(@"value: %@ error: %@", response, error);
|
||||
}
|
||||
}];
|
||||
}
|
||||
/*- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
|
||||
{
|
||||
NSDictionary* pDictionary =
|
||||
[NSDictionary dictionaryWithObjectsAndKeys:
|
||||
[conchConfig GetInstance]->m_sPlatformClassName,@"market_name",
|
||||
[NSNumber numberWithInt:[conchConfig GetInstance]->m_nChargeType],@"charge_type",
|
||||
[NSNumber numberWithInt:[conchConfig GetInstance]->m_nPayType],@"pay_type",
|
||||
[NSNumber numberWithInt:[conchConfig GetInstance]->m_nEnterPlatformType],@"enter_platform_type",
|
||||
[NSNumber numberWithInt:[conchConfig GetInstance]->m_nLoginType],@"login_type",nil];
|
||||
NSError* pError = nil;
|
||||
NSString* pJsonString = nil;
|
||||
NSData* pJsonData = [NSJSONSerialization dataWithJSONObject:pDictionary options:0 error:&pError];
|
||||
if( !pError )
|
||||
{
|
||||
pJsonString = [[NSString alloc] initWithData:pJsonData encoding:NSUTF8StringEncoding];
|
||||
}
|
||||
|
||||
NSString* js = [NSString stringWithFormat:@"if(!window.conchMarketData){window.conchMarketData=JSON.parse('%@')}",pJsonString];
|
||||
[_layaWKWebview.webview evaluateJavaScript:js completionHandler:^(id _Nullable response, NSError * _Nullable error) {
|
||||
if (response || error)
|
||||
{
|
||||
NSLog(@"value: %@ error: %@;", response, error);
|
||||
}
|
||||
}];
|
||||
|
||||
decisionHandler(WKNavigationActionPolicyAllow);
|
||||
}*/
|
||||
- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler {
|
||||
// 确定按钮
|
||||
UIAlertAction *alertAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
|
||||
completionHandler();
|
||||
}];
|
||||
// alert弹出框
|
||||
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:message message:nil preferredStyle:UIAlertControllerStyleAlert];
|
||||
[alertController addAction:alertAction];
|
||||
[self presentViewController:alertController animated:YES completion:nil];
|
||||
}
|
||||
@end
|
||||
Reference in New Issue
Block a user