WKWebView+CNGray.m 1.86 KB
//
//  WKWebView+CNGray.m
//  CNLiveScioLive
//
//  Created by CNLive on 2021/5/10.
//  Copyright © 2021 CNLive. All rights reserved.
//

#import "WKWebView+CNGray.h"

@implementation WKWebView (CNGray)
+(void)load
{
    static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            Method setImage = class_getInstanceMethod(self,@selector(initWithFrame:configuration:));
            Method xmtSwizzledSetImage = class_getInstanceMethod(self,@selector(cn_initWithFrame:configuration:));
            ///交换IMP
            method_exchangeImplementations(setImage, xmtSwizzledSetImage);
        });
}
- (instancetype)cn_initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration {
    BOOL gray = [[NSUserDefaults standardUserDefaults] boolForKey:ISGRAYMODE];
    if (gray) {
    // js脚本
    NSString *jScript = @"var filter = '-webkit-filter:grayscale(100%);-moz-filter:grayscale(100%); -ms-filter:grayscale(100%); -o-filter:grayscale(100%) filter:grayscale(100%);';document.getElementsByTagName('html')[0].style.filter = 'grayscale(100%)';meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width, user-scalable=no'); document.getElementsByTagName('head')[0].appendChild(meta);";
    // 注入
    WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jScript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];

    WKUserContentController *wkUController = [[WKUserContentController alloc] init];
       [wkUController addUserScript:wkUScript];
    // 配置对象
    WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init];
    wkWebConfig.userContentController = wkUController;
    configuration = wkWebConfig;
    }
    WKWebView *webView = [self cn_initWithFrame:frame configuration:configuration];
    return webView;
}
@end