WKWebView與UIWebView

WKWebView -> evaluateJavaScript

- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation{
    [webView evaluateJavaScript:@"document.title" completionHandler:^(NSString * _Nullable title, NSError * _Nullable error) {
        self.navigationItem.title = title;
    }];
}

UIWebView -> stringByEvaluatingJavaScriptFromString

- (void)webViewDidFinishLoad:(UIWebView *)webView{   
    self.navigationItem.title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];
}

WKWebView可以通過category方法實現(xiàn)stringByEvaluatingJavaScriptFromString,代碼如下

@interface WKWebView(SynchronousEvaluateJavaScript)
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
@end

@implementation WKWebView(SynchronousEvaluateJavaScript)

- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script
{
    __block NSString *resultString = nil;
    __block BOOL finished = NO;

    [self evaluateJavaScript:script completionHandler:^(id result, NSError *error) {
        if (error == nil) {
            if (result != nil) {
                resultString = [NSString stringWithFormat:@"%@", result];
            }
        } else {
            NSLog(@"evaluateJavaScript error : %@", error.localizedDescription);
        }
        finished = YES;
    }];

    while (!finished)
    {
        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
    }

    return resultString;
}
@end

//具體使用
NSString *userAgent = [_webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];

NSLog(@"userAgent: %@", userAgent);

JSContext -> evaluateScript

只有UIWebView可以拿到JSContext,WKWebView不能

- (void)webViewDidFinishLoad:(UIWebView *)webView{
    //獲取到JS的context
    JSContext *jsContext = [self.webView_1 valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    //設置JS執(zhí)行報錯捕獲
    [jsContext setExceptionHandler:^(JSContext *context, JSValue *exception){
        NSLog(@"%@", exception);
    }];
    
    JSValue *value = [jsContext evaluateScript:@"document.title"];
    self.navigationItem.title = value.toString;
}
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • WKWebView概述 WKWebView是蘋果在WWDC 2014 上推出的新一代WebView組件,相比iOS...
    沙琪瑪dd閱讀 8,947評論 14 34
  • 隨著H5技術的興起,在iOS開發(fā)過程中,難免會遇到原生應用需要和H5頁面交互的問題。其中會涉及方法調(diào)用及參數(shù)傳值等...
    Chris_js閱讀 3,243評論 1 8
  • 1.UIWebView 注入Cookie 由于使用UIWebView 會導致內(nèi)存暴漲,即使從web頁面退出后,內(nèi)存...
    黃二瓜閱讀 433評論 0 2
  • WKWebView與UIWebview實時監(jiān)測網(wǎng)頁title方法 初始化web 添加觀察者 當網(wǎng)頁title改變的...
    未來可期me閱讀 353評論 0 0
  • 每到星期一,課總是特別難上,兩天周末一過,前面五天的引導又歸零,這就是2>5現(xiàn)象。照片忘帶的,作品集沒做的……特別...
    犟龜汪瓊閱讀 1,000評論 0 1

友情鏈接更多精彩內(nèi)容