iOS 에서 JS 와 OC 데이터 의 상호작용 요약
OC 에서 JS 를 호출 하 는 방법
stringByEvaluatingJavaScriptFromString
방법 ====OC ====
- (IBAction)didClickButton:(id)sender {
NSString *name = @"lisi";
NSString *jsStr = [NSString stringWithFormat:@"changeName(\"%@\")",name];
[self.webview stringByEvaluatingJavaScriptFromString:jsStr];
}
====Html ====
function changeName(name){
var div = document.getElementById("mydiv");
div.innerHTML = name;
}
name:
zhangsan
setTimeout
에 넣 으 면 됩 니 다. 물론 하위 스 레 드 에서 호출 stringByEvaluatingJavaScriptFromString
을 시도 하면 정확 하지 않 습 니 다. 오 류 를 보고 하 는 정 보 는 다음 과 같 습 니 다.Tried to obtain the web lock from a thread other than the main thread or the web thread. This may be a result of calling to UIKit from a secondary thread. Crashing now...
JavaScriptCore
을 통 해 현재 iOS 7 이후 애플 은 새로운 라 이브 러 리 JavaScriptCore 를 추가 했다. 그 는 webkit 의 중요 한 구성 부분 으로 주로 JS 를 분석 하고 집행 환경 을 제공 하여 우리 가 js 에 대한 조작 을 매우 편리 하 게 했다. 여기 서 나 는 UIWebView 의 분 류 를 만 들 었 는데 주요 역할 은 webView 의 문맥 을 얻 는 것 이다.js 조작 에 편리 함: / * * 흑 마법 브리지 js * / @ interface UIWebView (JScontext) - (nullable JScontext *) context; @end #import "UIWebView+JSContext.h"
@implementation UIWebView (JSContext)
- (JSContext *)context {
return [self valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
}
@end
iOS 네 이 티 브 단 추 를 누 르 면 js 코드 를 실행 합 니 다: - (IBAction) didClickButton: (id) sender {NSString * name = @ "lisi"; NSString * jsStr = [NSString stringWithFormat: @ "changeName ("% @ ")", name]; JScontext * context = self. webview. context; [context evaluate Script: jsStr];} ====OC ====
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
// OC
if ([request.URL.scheme isEqualToString:@"bridge"]) {
// OC
// .......
return NO;
}
return YES;
}
====Html ====
function test() {
var mydiv = document.getElementById("mydiv");
window.location.href="bridge://" + mydiv.innerHTML;
}
name:
zhangsan
JSContext *context = webView.context;
// JS
context[@"myName"] = @"sunsb";
// JS
context[@"test3"] = ^(){
// OC ......
// ## :
NSLog(@" js OC
:%@
",[NSThread currentThread]);
NSArray *args = [JSContext currentArguments];
for (JSValue *value in args) {
NSLog(@"%@",value.toString);
}
};
}
====Html ====
function test() {
// myName OC
alert(myName);
// test3 OC
test3("one","two","three");
}
name:
zhangsan
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.