JavaScriptとObjective-Cの間の通信
6023 ワード
1、JSで変数がOCにあるタイプはOC-JS Bridgeによって変数のタイプが自動的に変換され、基本タイプは自動的に変換されます.JSのnumber、bootleanはOCにおけるNSNumberタイプに変換されます.Stringタイプは自動的にNSStringタイプに変換され、JSでの象はWebScripptObjectオブジェクトに変換されます.関連する属性情報は、Key-Valueの方法で読み取って書き込むことができ、本文の後に関連するコードが見られます.
2、OCでJSメソッドを呼び出してOCでJSメソッドを呼び出すことを実現するのはとても便利です.WebViewにはWindows Script Object属性があります.直接にスクリプトオブジェクトを獲得できます.その後、calWebScript Method:withAgmentsを呼び出してJSのオブジェクトにメッセージを転送する方法とパラメータがあります.簡単な方法で呼び出しても、直接WebViewの方法でstrigByEveraluating JavaScript FroomStringを実行して、文字列を返します.サンプルコード:
2、OCでJSメソッドを呼び出してOCでJSメソッドを呼び出すことを実現するのはとても便利です.WebViewにはWindows Script Object属性があります.直接にスクリプトオブジェクトを獲得できます.その後、calWebScript Method:withAgmentsを呼び出してJSのオブジェクトにメッセージを転送する方法とパラメータがあります.簡単な方法で呼び出しても、直接WebViewの方法でstrigByEveraluating JavaScript FroomStringを実行して、文字列を返します.サンプルコード:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// OC
- (void)ocAction:(id)sender
{
NSArray *args = @[@"Hello,JS!"];
id result = [[webView windowScriptObject] callWebScriptMethod:@"JSFunction" withArguments:args];
NSLog(@"%@",result);
}
// JS
function JSFunction(parameter)
{
// OC
alert(parameter);
//
return 'Web !';
}
3、JSがOCを呼び出す方法はwebViewのframe LoadDelegateを設定することによって、–webView:didClear WindowObject:forFrame:回調方法でローカルオブジェクトを指定し、JSで直接にこのオブジェクトの関連方法を呼び出すことができます.OCのコードは以下の通りです.// JS
- (WebScriptObject *)status:(WebScriptObject *)jsObject
{
// JS
NSString *message = [jsObject valueForKey:@"message"];
NSLog(@"%@",message);
// (WebScriptObject , )
[jsObject setValue:@" !" forKey:@"message"];
return jsObject;
}
#pragma mark -
#pragma mark WebFrameLoadDelegate
// , self JS
- (void)webView:(WebView *)sender didClearWindowObject:(WebScriptObject *)windowObject forFrame:(WebFrame *)frame
{
[windowObject setValue:self forKey:@"native"];
}
#pragma mark -
#pragma mark WebScriptingProtocol
/*
,
NO
*/
+ (BOOL)isSelectorExcludedFromWebScript:(SEL)selector
{
if (selector == @selector(status:))
{
return NO;
}
return YES;
}
/*
JS ( , JS OC )
*/
+ (NSString *)webScriptNameForSelector:(SEL)sel
{
if (sel == @selector(status:))
{
return @"ocMethod";
}
return nil;
}
JSのコードは以下の通りです.function CallNative()
{
if (native)
{
// OC
var parameter = {'message':'Hello,Objective-C!'};
var result = native.ocMethod(parameter);
// OC
alert(result['message']);
}
}