zhongwuzw / WebBrowser

iOS浏览器 Web Browser for iOS
https://github.com/zhongwuzw/WebBrowser
MIT License
375 stars 92 forks source link

想请教作者一个问题,类似于UC浏览器的夜间模式是怎么实现的? #13

Closed CXTretar closed 6 years ago

CXTretar commented 6 years ago

我尝试使用在- (void)webViewDidFinishLoad:(UIWebView *)webView;中注入JS代码修改网页CSS样式,但是这样会导致先加载原网页在加载新样式,反差有点大,有其他的方案么?

zhongwuzw commented 6 years ago

@CXTretar 推荐一个比较trick的方法- (void)webView:(id)arg1 didReceiveTitle:(id)arg2 forFrame:(id)arg3;,该方法会在得到title的时候回调, 由于title是在<head>标签里,所以可以在这个时候提前注入你想要的JS代码,不过需要注意的是,并不是所有网站都有这个标签,不过几乎所有的都有,你可以在webViewDidFinishLoad里做一些补充。

如果你使用WKWebView的话,就比较简单了,提供了公开的API,可以将脚本设置为WKUserScriptInjectionTimeAtDocumentStart加载。

CXTretar commented 6 years ago

好的,我尝试一下在这里注入JS

CXTretar commented 6 years ago

@zhongwuzw
- (void)webView:(id)arg1 didReceiveTitle:(id)arg2 forFrame:(id)arg3; 好像是可以的,这个方法是私有Api吧,只能通过 runtime去调用的是吧,这个会影响上架么?

zhongwuzw commented 6 years ago

@CXTretar 可以参考一下我的这个实现,需要注意的是WEB_GOT_TITLE这个宏,我是直接拼好了SEL,为了规避上架的风险,建议使用拼串的方式,这样应该是没问题的.

CXTretar commented 6 years ago

好的,已经帮了我很大忙了,感谢!