在平常的ios項目開發中,咱們常常會在原生應用中嵌入web頁面,一般咱們只是進行一個展現,沒有其它的一些功能。可是也有一些項目中須要web頁面中的html和native進行交互。可是ios sdk 並無相應的方法來讓咱們作到js代碼來和原生進行交互。可是webview在加載前會調用其一個delegate方法,經過監聽
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
代理方法,咱們能夠經過url的變化來判斷用戶目前的一些點擊行爲。以下:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
if ([[request.URL.absoluteString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]hasSuffix:@'login_app']) {
//用戶點擊了登陸按鈕
[self doLogin];
return YES;
}else if([[request.URL.absoluteString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]hasSuffix:@'register_app']){
//用戶點擊了註冊按鈕
[self doRegister];
return YES;
}
}
咱們能夠看到,針對不一樣的url,咱們能夠判斷對應的用戶行爲,可是前提是用戶的不一樣行爲給webView帶來不一樣的響應url,這樣咱們才能夠判斷用戶的行爲。html
同時在咱們的項目開發過程當中,其實咱們有的時候也但願去操控webview中顯示的頁面。針對這一點,ios sdk 提供了相應的方法,
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
好比咱們想獲取頁面中的id爲icon_app的某個屬性。咱們能夠以下操做前端
NSString *downLoadPath = [webView stringByEvaluatingJavaScriptFromString:@'document.getElementById('icon_app').getAttribute('data_url')'];
在編寫這種代碼的前提是咱們對於js比較熟悉,能給書寫一些簡單的js代碼,固然咱們也能夠向相應同事提供幫助。另外其實咱們也能夠調用webView中js方法,前提是咱們的前端同事把對應的js方法寫好,而後在咱們在native中採用stringByEvaluatingJavaScriptFromString 來調用對應的方法。以下:ios
[myWebView stringByEvaluatingJavaScriptFromString:@'showPlay()'];web