WKWebView+CNGray.m
1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//
// 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