From 9a0cbf613b2fde5b35879f0950de4244628c3843 Mon Sep 17 00:00:00 2001 From: Fernando Valverde Date: Mon, 9 Nov 2020 08:35:08 -0600 Subject: [PATCH] Experiment where we clear the WebView history --- ForemWebView.xcodeproj/project.pbxproj | 8 ++++++++ ForemWebView/ForemUserData.swift | 2 +- .../ForemWebView+WKNavigationDelegate.swift | 6 ++++++ ForemWebView/ForemWebView.swift | 3 +++ ForemWebView/URL+QueryParameters.swift | 13 +++++++++++++ ForemWebView/WebViewHistory.swift | 19 +++++++++++++++++++ 6 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 ForemWebView/URL+QueryParameters.swift create mode 100644 ForemWebView/WebViewHistory.swift diff --git a/ForemWebView.xcodeproj/project.pbxproj b/ForemWebView.xcodeproj/project.pbxproj index 1361a92..3a2505a 100644 --- a/ForemWebView.xcodeproj/project.pbxproj +++ b/ForemWebView.xcodeproj/project.pbxproj @@ -22,6 +22,8 @@ DC3DAE8325229E18004DAC13 /* ForemWebView.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DC3DAE3425229D8C004DAC13 /* ForemWebView.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; DC3DAE9625229FD2004DAC13 /* forem.dev.html in Resources */ = {isa = PBXBuildFile; fileRef = DC3DAE9425229FD2004DAC13 /* forem.dev.html */; }; DC3DAE9725229FD2004DAC13 /* forem.dev-logged-in.html in Resources */ = {isa = PBXBuildFile; fileRef = DC3DAE9525229FD2004DAC13 /* forem.dev-logged-in.html */; }; + DC6576232559815B00B5B46F /* WebViewHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC6576222559815B00B5B46F /* WebViewHistory.swift */; }; + DC6576292559898900B5B46F /* URL+QueryParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC6576282559898900B5B46F /* URL+QueryParameters.swift */; }; DC9EF35D2549E013003A1BE7 /* ForemUserData.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC9EF35C2549E013003A1BE7 /* ForemUserData.swift */; }; DC9EF3612549FDD5003A1BE7 /* invertedImages.css in Resources */ = {isa = PBXBuildFile; fileRef = DC9EF3602549FDD5003A1BE7 /* invertedImages.css */; }; DCD7C211254A9B4D00FAFC1D /* forem.dev-logged-in-dark.html in Resources */ = {isa = PBXBuildFile; fileRef = DCD7C210254A9B4D00FAFC1D /* forem.dev-logged-in-dark.html */; }; @@ -85,6 +87,8 @@ DC3DAE6825229E0B004DAC13 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; DC3DAE9425229FD2004DAC13 /* forem.dev.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = forem.dev.html; sourceTree = ""; }; DC3DAE9525229FD2004DAC13 /* forem.dev-logged-in.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "forem.dev-logged-in.html"; sourceTree = ""; }; + DC6576222559815B00B5B46F /* WebViewHistory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewHistory.swift; sourceTree = ""; }; + DC6576282559898900B5B46F /* URL+QueryParameters.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URL+QueryParameters.swift"; sourceTree = ""; }; DC9EF35C2549E013003A1BE7 /* ForemUserData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForemUserData.swift; sourceTree = ""; }; DC9EF3602549FDD5003A1BE7 /* invertedImages.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = invertedImages.css; sourceTree = ""; }; DCD7C210254A9B4D00FAFC1D /* forem.dev-logged-in-dark.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "forem.dev-logged-in-dark.html"; sourceTree = ""; }; @@ -151,6 +155,8 @@ DC3DAE4025229DA5004DAC13 /* ForemWebView.swift */, DC3DAE4325229DBB004DAC13 /* ForemWebView+WKScriptMessageHandler.swift */, DCF27D5B255116EF0065770D /* ForemWebView+WKNavigationDelegate.swift */, + DC6576222559815B00B5B46F /* WebViewHistory.swift */, + DC6576282559898900B5B46F /* URL+QueryParameters.swift */, DC3DAE4625229DD7004DAC13 /* ForemMediaManager.swift */, DCF27D912551D2190065770D /* ForemMediaManager+LockedScreenControls.swift */, DC9EF35C2549E013003A1BE7 /* ForemUserData.swift */, @@ -372,7 +378,9 @@ files = ( DC9EF35D2549E013003A1BE7 /* ForemUserData.swift in Sources */, DC3DAE4125229DA5004DAC13 /* ForemWebView.swift in Sources */, + DC6576232559815B00B5B46F /* WebViewHistory.swift in Sources */, DC3DAE4425229DBB004DAC13 /* ForemWebView+WKScriptMessageHandler.swift in Sources */, + DC6576292559898900B5B46F /* URL+QueryParameters.swift in Sources */, DCF27D5C255116EF0065770D /* ForemWebView+WKNavigationDelegate.swift in Sources */, DC3DAE4725229DD7004DAC13 /* ForemMediaManager.swift in Sources */, DCF27D7825519F660065770D /* ForemInstanceMetadata.swift in Sources */, diff --git a/ForemWebView/ForemUserData.swift b/ForemWebView/ForemUserData.swift index 27c671c..5fed451 100644 --- a/ForemWebView/ForemUserData.swift +++ b/ForemWebView/ForemUserData.swift @@ -17,7 +17,7 @@ import Foundation themeName = String(element[range]) } } - + switch themeName { case "night-theme": return .night diff --git a/ForemWebView/ForemWebView+WKNavigationDelegate.swift b/ForemWebView/ForemWebView+WKNavigationDelegate.swift index cb854b7..62bc052 100644 --- a/ForemWebView/ForemWebView+WKNavigationDelegate.swift +++ b/ForemWebView/ForemWebView+WKNavigationDelegate.swift @@ -10,6 +10,12 @@ extension ForemWebView: WKNavigationDelegate { webView.scrollView.isScrollEnabled = !(webView.url?.path.hasPrefix("/connect") ?? false) ensureForemInstance() ensureMutationObserver() + if let url = webView.url, let params = url.queryParameters, params["signin"] == "true" { + history.clearBackList() + print("CLEARED!!!!!!!!!!!!") + } else { + print("NOOOOOOOOOOOTTTTT") + } foremWebViewDelegate?.didFinishNavigation() } diff --git a/ForemWebView/ForemWebView.swift b/ForemWebView/ForemWebView.swift index fbc0811..9cf547f 100644 --- a/ForemWebView/ForemWebView.swift +++ b/ForemWebView/ForemWebView.swift @@ -31,6 +31,9 @@ open class ForemWebView: WKWebView { return ForemMediaManager(webView: self) }() + var history = ForemWebViewHistory() + open override var backForwardList: ForemWebViewHistory { return history } + required public init?(coder: NSCoder) { super.init(coder: coder) setupWebView() diff --git a/ForemWebView/URL+QueryParameters.swift b/ForemWebView/URL+QueryParameters.swift new file mode 100644 index 0000000..d8ffa0c --- /dev/null +++ b/ForemWebView/URL+QueryParameters.swift @@ -0,0 +1,13 @@ +import Foundation +import WebKit + +extension URL { + public var queryParameters: [String: String]? { + guard let components = URLComponents(url: self, resolvingAgainstBaseURL: true), + let queryItems = components.queryItems else { return nil } + + return queryItems.reduce(into: [String: String]()) { (result, item) in + result[item.name] = item.value + } + } +} diff --git a/ForemWebView/WebViewHistory.swift b/ForemWebView/WebViewHistory.swift new file mode 100644 index 0000000..8673c1c --- /dev/null +++ b/ForemWebView/WebViewHistory.swift @@ -0,0 +1,19 @@ +import Foundation +import WebKit + +open class ForemWebViewHistory: WKBackForwardList { + var historyBackList = [WKBackForwardListItem]() + + open override var backList: [WKBackForwardListItem] { + get { + return historyBackList + } + set(list) { + historyBackList = list + } + } + + open func clearBackList() { + historyBackList.removeAll() + } +}