iOS中如何修改WebView内网页按钮的背景颜色?
当然可以修改WebView中网页按钮的颜色!
不管是UIWebView还是WKWebView,都能通过注入JavaScript的方式修改加载网页里的元素样式,甚至替换部分界面。下面分两种WebView给你具体说明:
一、WKWebView(推荐使用,苹果官方现在主推这个)
你需要利用WKNavigationDelegate的回调,在网页加载完成后注入JS代码来修改按钮样式:
- 先给WebView设置delegate,然后实现
webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)方法 - 在这个方法里,执行JavaScript定位登录按钮并修改它的颜色。比如Salesforce的登录按钮通常带有
name="Login"属性,用这个定位会比类名更稳定:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { // 替换成你想要的按钮背景色和文字色 let jsCode = """ const loginBtn = document.querySelector('input[name="Login"]'); if (loginBtn) { loginBtn.style.backgroundColor = '#2196F3'; loginBtn.style.color = '#FFFFFF'; // 还可以加圆角、边框等样式,比如: loginBtn.style.borderRadius = '4px'; loginBtn.style.border = 'none'; } """ webView.evaluateJavaScript(jsCode) { (result, error) in if let error = error { print("修改按钮样式出错:\(error.localizedDescription)") } } }
二、UIWebView(已废弃,不建议新项目使用)
如果你的项目还在维护旧的UIWebView,同样可以在网页加载完成后注入JS:
- 设置
UIWebViewDelegate,实现webViewDidFinishLoad(_ webView: UIWebView)方法 - 调用
stringByEvaluatingJavaScript(from:)执行修改代码:
func webViewDidFinishLoad(_ webView: UIWebView) { let jsCode = """ const loginBtn = document.querySelector('input[name="Login"]'); if (loginBtn) { loginBtn.style.backgroundColor = '#2196F3'; loginBtn.style.color = '#FFFFFF'; } """ let _ = webView.stringByEvaluatingJavaScript(from: jsCode) }
额外建议:完全替换登录界面
如果想要彻底摆脱默认的Salesforce登录界面,更灵活的方式是自己做一个原生登录界面,收集用户的用户名和密码后,直接调用Salesforce的OAuth流程或者REST API完成登录。这种方式你能完全掌控UI的每一个细节,不用依赖网页结构(毕竟Salesforce的登录页面可能会更新,导致你的JS选择器失效)。
小提醒:如果Salesforce的登录页面结构发生变化,你需要调整JS里的选择器,尽量用像
name、id这类更稳定的属性来定位元素,避免因为类名变动导致修改失效。
内容的提问来源于stack exchange,提问作者Vignesh
相关产品推荐
相关产品推荐

