간단한 호출의 경우 JSBridge을 사용합니다. JSBridge.js 헤더 파일 하나를 추가하여 자바 스크립트 측을 수정해야합니다. 나는 그것을 테스트하고 작동합니다.
일반적인 생각은 javascript가 실제로 탐색중인 주소를 리디렉션 할 수 있다는 것입니다. 이 경우 고유 한 명령 포함 URL로 기본 콜백 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
이 호출됩니다. 이 URL은 자바 스크립트에서 전달 된 다음 콜백에서이 URL을 구문 분석하고 적절한 작업을 호출 할 수 있습니다.
은 일반적으로 자신의 JSBridge 기능을 할 수 말하기, 그것은 다음과 같이 작동합니다 :
를 자바 스크립트에서 어떤 명령을 수행 할 때, 호출 :
window.location.href = "command : // goToHomeViewController"
이 javaScript로 페이지를로드 한 webView 대리자에서 사용자 명령에 대한 후크를 만듭니다. 당신의 ViewController.m
(BOOL)webView:(UIWebView *)p_WebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
BOOL result = YES;
NSString *urlString = [[request URL] absoluteURL];
if ([urlString compare:@"command://goToHomeViewController"] == NSOrderedSame)
{
result = NO;
[self goToHomeViewController];
}
return result;
}
당신이 당신의 shouldStartLoadWithRequest에 차단 명령을 가지고 이런 식으로
는, 당신은 당신의 ViewController 네이티브 코드에 명령을 수행하고 웹보기로드 페이지를 취소 NO를 반환합니다.
감사합니다. 그러나 이것이 내가 찾고있는 것이 맞는지 확신 할 수 없습니다. 또한 JSBridge 예제를 다운로드하여 실행하려고 시도했으며 JSON Framework가 필요하다고 말하면서 JSON Framework가 포함되어 있다고 말합니다.하지만 그렇지 않습니다. 설치할 프레임 워크를 찾을 수 없습니다. UIWebView로 다시 돌아가고 싶지 않습니다. Javascript에서 표준 UIViewController로 돌아갈 필요가 있습니다. 이것이 가능한지 아십니까? 다시 한번 감사드립니다. – Jon
들어오는 URL을 가로 채어 위와 같이 명령으로 변환해야합니다. –
나는 올바른 길을 가고 있다고 생각하며 도와 주셔서 감사합니다. 유일한 생각은 위 코드를 어디에 두어야하는지 코드에서 추적하는 것입니다. MainViewController에서 shouldStartLoadWithRequest가 주석 처리됩니다. 앱이 Cordova (일명 PhoneGap)를 사용하고 있으며 ChildBrowser 및 ASIHTTPRequest가 있습니다. 나는 새로운 UIViewController에 점프를 추가하도록 임무를 부여 받았다. 다른 아이디어가 있다면 크게 환영 할 것입니다. 다시 한번 감사드립니다! – Jon