从 Swift 的网络视图中删除部分
Remove section from webview in Swift
我有这个网站 http://www.zakatona.com 我想在 swift 中制作一个 webView 应用程序,但我想从网页中删除导航栏。
我尝试通过 ID 删除,但我不能。
class ViewController: UIViewController {
@IBOutlet weak var webView: UIWebView!
public var internalHosts: [String] = ["zakatona.com"]
public var elementsToRemove: [String] = [
"navbarappleid",
"minimal-intro",
"features",
"downloadappleid"
]
override func viewDidLoad() {
super.viewDidLoad()
getPost()
setupSideMenu(storyBoard: self.storyboard!)
}
func getPost() {
loadURL(urlString: "http://www.zakatona.com/zakat-calculator.php")
}
func loadURL(urlString: String) {
if let url = URL(string: urlString) {
self.webView.loadRequest(URLRequest(url: url))
}
}
}
extension ViewController:UIWebViewDelegate {
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
if let url = request.url, navigationType == .linkClicked, isExternalHost(forURL: url), UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url)
return false
}
return true
}
func webViewDidStartLoad(_ webView: UIWebView) {
self.startActivityIndicator()
self.removeElements(fromWebView: webView)
}
func webViewDidFinishLoad(_ webView: UIWebView) {
self.removeElements(fromWebView: webView)
self.stopActivityIndicator()
}
private func startActivityIndicator() {
UIApplication.shared.isNetworkActivityIndicatorVisible = true
}
private func stopActivityIndicator() {
UIApplication.shared.isNetworkActivityIndicatorVisible = false
}
private func isExternalHost(forURL url: URL) -> Bool {
if let host = url.host, internalHosts.contains(host) {
return false
}
return true
}
private func removeElements(fromWebView webView: UIWebView) {
self.elementsToRemove.forEach { self.removeElement(elementID: [=11=], fromWebView: webView) }
}
private func removeElement(elementID: String, fromWebView webView: UIWebView) {
let removeElementIdScript = "var element = document.getElementById('\(elementID)'); element.parentElement.removeChild(element);"
webView.stringByEvaluatingJavaScript(from: removeElementIdScript)
let removeElementClassScript = "document.getElementsByClassName('\(elementID)')[0].style.display=\"none\";"
webView.stringByEvaluatingJavaScript(from: removeElementClassScript)
}
}
我使用此代码通过 id 删除元素,但此代码对我不起作用。
使用 WKWebView
而不是 UIWebView
。这是我的 html
<html>
<body bgcolor="#E6E6FA">
<button id="somebutton">Name</button>
</body>
</html>
我将在加载 WKWebView
时删除 ID 为 somebutton
的按钮。
我使用了本地 html 文件,但这应该不会影响 O/P。
没有添加任何 WKWebView
委托方法 O/P 看起来像
现在继续添加代表
self.webView.navigationDelegate = self
实现委托方法
extension ViewController : WKNavigationDelegate {
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
let elementID = "somebutton"
let removeElementIdScript = "var element = document.getElementById('\(elementID)'); element.parentElement.removeChild(element);"
webView.evaluateJavaScript(removeElementIdScript) { (response, error) in
debugPrint("Am here")
}
}
}
O/P 添加委托方法后
希望对您有所帮助
我有这个网站 http://www.zakatona.com 我想在 swift 中制作一个 webView 应用程序,但我想从网页中删除导航栏。
我尝试通过 ID 删除,但我不能。
class ViewController: UIViewController {
@IBOutlet weak var webView: UIWebView!
public var internalHosts: [String] = ["zakatona.com"]
public var elementsToRemove: [String] = [
"navbarappleid",
"minimal-intro",
"features",
"downloadappleid"
]
override func viewDidLoad() {
super.viewDidLoad()
getPost()
setupSideMenu(storyBoard: self.storyboard!)
}
func getPost() {
loadURL(urlString: "http://www.zakatona.com/zakat-calculator.php")
}
func loadURL(urlString: String) {
if let url = URL(string: urlString) {
self.webView.loadRequest(URLRequest(url: url))
}
}
}
extension ViewController:UIWebViewDelegate {
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
if let url = request.url, navigationType == .linkClicked, isExternalHost(forURL: url), UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url)
return false
}
return true
}
func webViewDidStartLoad(_ webView: UIWebView) {
self.startActivityIndicator()
self.removeElements(fromWebView: webView)
}
func webViewDidFinishLoad(_ webView: UIWebView) {
self.removeElements(fromWebView: webView)
self.stopActivityIndicator()
}
private func startActivityIndicator() {
UIApplication.shared.isNetworkActivityIndicatorVisible = true
}
private func stopActivityIndicator() {
UIApplication.shared.isNetworkActivityIndicatorVisible = false
}
private func isExternalHost(forURL url: URL) -> Bool {
if let host = url.host, internalHosts.contains(host) {
return false
}
return true
}
private func removeElements(fromWebView webView: UIWebView) {
self.elementsToRemove.forEach { self.removeElement(elementID: [=11=], fromWebView: webView) }
}
private func removeElement(elementID: String, fromWebView webView: UIWebView) {
let removeElementIdScript = "var element = document.getElementById('\(elementID)'); element.parentElement.removeChild(element);"
webView.stringByEvaluatingJavaScript(from: removeElementIdScript)
let removeElementClassScript = "document.getElementsByClassName('\(elementID)')[0].style.display=\"none\";"
webView.stringByEvaluatingJavaScript(from: removeElementClassScript)
}
}
我使用此代码通过 id 删除元素,但此代码对我不起作用。
使用 WKWebView
而不是 UIWebView
。这是我的 html
<html>
<body bgcolor="#E6E6FA">
<button id="somebutton">Name</button>
</body>
</html>
我将在加载 WKWebView
时删除 ID 为 somebutton
的按钮。
我使用了本地 html 文件,但这应该不会影响 O/P。
没有添加任何 WKWebView
委托方法 O/P 看起来像
现在继续添加代表
self.webView.navigationDelegate = self
实现委托方法
extension ViewController : WKNavigationDelegate {
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
let elementID = "somebutton"
let removeElementIdScript = "var element = document.getElementById('\(elementID)'); element.parentElement.removeChild(element);"
webView.evaluateJavaScript(removeElementIdScript) { (response, error) in
debugPrint("Am here")
}
}
}
O/P 添加委托方法后
希望对您有所帮助