在上下滾動(dòng)的時(shí)候 webview內(nèi)容部分消失的解決辦法

今天發(fā)現(xiàn)之前的商品詳情頁在圖文詳情頁面是用的 UIWebView 在 Xcode8 上面跑都是沒有問題的, 但是在 Xcode9 上面跑 在上下滾動(dòng)的時(shí)候, webview內(nèi)容部分消失.如圖 ,我就納悶了, 就放了一個(gè) webView 我又沒有做啥操作, 為啥會(huì)出現(xiàn)這種情況呢.而且在 Xcode8 上面是正常的, 在9上就不正常了,很奇怪. 于是我把那個(gè)連接拿出來 在新建的程序跑起來, 用 UIWebView 還是這樣的問題.于是 我就想到不用 UIWebView
QQ20180103-171731-HD.gif

解決辦法
就是用 WKWebView 代替 UIWebView WKWebView在各個(gè)性能都要比UIWebView高, 這是個(gè)不錯(cuò)的選中, 事實(shí)證明, 我的選擇也是正確的.如果你僅僅是為了解決現(xiàn)實(shí)的問題, 那么你就換成WKWebView.

下面我就要說我遇到的其他問題. 因?yàn)槲也恢宫F(xiàn)實(shí)的問題 , 我的還需要點(diǎn)擊圖片放大, 所以得加攔截到點(diǎn)擊事件.

  1. 添加點(diǎn)擊事件, 需要后臺(tái)加點(diǎn)擊的標(biāo)簽, 然后我們?nèi)r截標(biāo)簽, 這是一種方法,
    2 自己給這個(gè)忘記植入 JS 代碼.

因?yàn)槲覀兒笈_(tái)設(shè)置的這個(gè)圖片用通過富文本編輯, 所以不好加標(biāo)簽, 后臺(tái)本來也可以植入 JS 代碼的, 但是也是因?yàn)樯厦孢@個(gè)原因 不能加. 所以就只能我們這邊植入 JS 代碼了 .在原來用UIWebView 也是我們這邊植入的JS 代碼. 但是換成 WKWebView 再次植入的代碼就不行了

// 頁面加載完成之后調(diào)用
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
{
    //js方法遍歷圖片添加點(diǎn)擊事件 返回圖片個(gè)數(shù)
    static  NSString * const jsGetImages =
    @"function getImages(){\
    var objs = document.getElementsByTagName(\"img\");\
    for(var i=0;i<objs.length;i++){\
    objs[i].onclick=function(){\
    document.location=\"myweb:imageClick:\"+this.src;\
    };\
    };\
    return objs.length;\
    };";
    DLog(@"%@",jsGetImages);
    [webView evaluateJavaScript:@"getImages()" completionHandler:^(id _Nullable response, NSError * _Nullable error) {
         NSLog(@"value: %@ error: %@", response, error);
    }];

}

于是就上網(wǎng)找了找相關(guān)的一些文章.大多數(shù)都是沒有提到的,找了很久, 嘗試了很多種方法都不行,于是我就把實(shí)例化的方式改變了之前是

- (WKWebView *)mainWeb
{
    if (!_mainWeb) {
        _mainWeb = [[WKWebView alloc]initWithFrame:CGRectMake(0, NavHeight, ScreenWidth, ScreenHeight - NavHeight)];
        _mainWeb.navigationDelegate = self;
        _mainWeb.UIDelegate = self;
        [self.view addSubview:_mainWeb];
    }
    return _mainWeb;
}

換成了下面這種

- (WKWebView *)mainWeb
{
    if (!_mainWeb) {
        // 根據(jù)JS字符串初始化WKUserScript對(duì)象
        static  NSString * const jsGetImages =
            @"function getImages(){\
            var objs = document.getElementsByTagName(\"img\");\
            for(var i=0;i<objs.length;i++){\
            objs[i].onclick=function(){\
            document.location=\"myweb:imageClick:\"+this.src;\
            };\
            };\
            return objs.length;\
            };";
        WKUserScript *script = [[WKUserScript alloc] initWithSource:jsGetImages injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
//
//        // 根據(jù)生成的WKUserScript對(duì)象,初始化WKWebViewConfiguration
        WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
        [config.userContentController addUserScript:script];
        _mainWeb = [[WKWebView alloc]initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight - TabbarHeight)configuration:config];
        _mainWeb.navigationDelegate = self;
        _mainWeb.UIDelegate = self;
        [self.view addSubview:_mainWeb];
    }
    return _mainWeb;
}

果然黃天不負(fù)有心人呀, 花了大半天的時(shí)間終于找到了原因, 就是要在WKWebView 實(shí)例化的時(shí)候 也要植入 JS 代碼, 這樣就可以點(diǎn)擊圖片的時(shí)候就能走下面的方法了.
000D949B-FC46-4877-867D-3FCD00971989.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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