I have this site http://www.zakatona.com i want to make a webView app in swift but I want to remove the navigation bar from the web page.
I tried to remove by id but I can't.
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: $0, 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)
}
}
I use this code to remove elements by id but this code can't work for me.
Make Use of WKWebView
and not UIWebView
. Here is my html
<html>
<body bgcolor="#E6E6FA">
<button id="somebutton">Name</button>
</body>
</html>
Ill be removing the button with id somebutton
on loading the WKWebView
.
I have used the local html file but that should not affect the O/P.
Without any WKWebView
delegate method added O/P looks like
Now go ahead and add delegates
self.webView.navigationDelegate = self
Implement delegate methods
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 after adding delegate method
Hope it helps
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments