반응형
JavaScript to Native
안드로이드에서 Bridge를 사용해서 Web에서 JavaScript 호출하면 Native를 호출 할수가 있었다.
안드로이드 예제
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new AndroidBridge(),"MyScript");
public class AndroidBridge {
public void webViewClose() {
Log.d(TAG, "웹뷰 닫기~")
}
}
iOS7 이후 부터는 안드로이드 처리하는게 가능하다.
(그 전에는 shouldStartLoadWithRequest
에서 scheme 파싱해서 처리 했었다.)
자세한 내용은 다음 WWDC를 참조 (WWDC 615 - Integrating JavaScript into Native Apps)
사용방법은 다음과 같다.
- 호출할 프로토콜을 JSExport상속받아 생성
자바스크립트 처리할 클래스 만들고 프로토콜 처리
@objc protocol ScriptProtocol : JSExport { func webViewClose() } @objc class MyScript: NSObject { var webView: UIWebView init(webView: UIWebView) { self.webView = webView } } extension MyScript: ScriptProtocol { func webViewClose() { print("웹뷰 닫기~") } }
WebView 로딩후 자바스크립트로 클래스와 함수 등록
웹뷰 에서 delegate 설정하고
webViewDidFinishLoad
에서 JavaScript를 실행시켜주면 된다.webView.delegate = self ... extension ViewController: UIWebViewDelegate { func webViewDidFinishLoad(_ webView: UIWebView) { let key = "documentView.webView.mainFrame.javaScriptContext" if let context = webView.value(forKeyPath: key) as? JSContext { context.setObject(MyScript(self.webView), forKeyedSubscript: "MyScript" as (NSCopying & NSObjectProtocol)!) context.evaluateScript("function webViewClose() {webViewClose();}") } } }
웹(JavaScript)에서는 다음과 같이 설정 되어 있으면 된다.
function webClose() {
window.MyScript.webViewClose();
}
<button onclick="webClose();">종료</button>
반응형
'iOS > Tip' 카테고리의 다른 글
SwipeGesture를 ScrollView와 함께 사용하기 (0) | 2017.01.31 |
---|---|
EUC-KR / CP949 문자열 처리 하기 (0) | 2017.01.20 |
WKWebView에서 Cookies 사용하기 (0) | 2017.01.05 |
IndicatorView (0) | 2016.12.22 |
Autolayout 우선순위 (0) | 2016.12.14 |
URLSession 사용시 참고 (0) | 2016.12.08 |
메모리 정보 가져오기 (0) | 2016.11.30 |
현재 IP 가져오기 (0) | 2016.11.29 |