diff --git a/ForemWebView.xcodeproj/project.pbxproj b/ForemWebView.xcodeproj/project.pbxproj index d4272a8..7e329ca 100644 --- a/ForemWebView.xcodeproj/project.pbxproj +++ b/ForemWebView.xcodeproj/project.pbxproj @@ -10,7 +10,6 @@ DC3DAE3925229D8C004DAC13 /* ForemWebView.h in Headers */ = {isa = PBXBuildFile; fileRef = DC3DAE3725229D8C004DAC13 /* ForemWebView.h */; settings = {ATTRIBUTES = (Public, ); }; }; DC3DAE4125229DA5004DAC13 /* ForemWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC3DAE4025229DA5004DAC13 /* ForemWebView.swift */; }; DC3DAE4425229DBB004DAC13 /* ForemWebView+WKScriptMessageHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC3DAE4325229DBB004DAC13 /* ForemWebView+WKScriptMessageHandler.swift */; }; - DC3DAE4725229DD7004DAC13 /* ForemMediaManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC3DAE4625229DD7004DAC13 /* ForemMediaManager.swift */; }; DC3DAE5025229E08004DAC13 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC3DAE4F25229E08004DAC13 /* AppDelegate.swift */; }; DC3DAE5225229E08004DAC13 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC3DAE5125229E08004DAC13 /* SceneDelegate.swift */; }; DC3DAE5425229E08004DAC13 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC3DAE5325229E08004DAC13 /* ViewController.swift */; }; @@ -22,8 +21,13 @@ 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 */; }; - DC6576432559CCDD00B5B46F /* ForemMediaManager+PodcastActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC6576422559CCDC00B5B46F /* ForemMediaManager+PodcastActions.swift */; }; + DC6576232559815B00B5B46F /* WebViewHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC6576222559815B00B5B46F /* WebViewHistory.swift */; }; + DC6576292559898900B5B46F /* URL+QueryParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC6576282559898900B5B46F /* URL+QueryParameters.swift */; }; + DC6576432559CCDD00B5B46F /* (null) in Sources */ = {isa = PBXBuildFile; }; DC6576472559CCED00B5B46F /* ForemMediaManager+VideoActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC6576462559CCED00B5B46F /* ForemMediaManager+VideoActions.swift */; }; + DC65765C2559E2EF00B5B46F /* ForemMediaManager+PodcastActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC6576592559E2EF00B5B46F /* ForemMediaManager+PodcastActions.swift */; }; + DC65765D2559E2EF00B5B46F /* ForemMediaManager+LockedScreenControls.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC65765A2559E2EF00B5B46F /* ForemMediaManager+LockedScreenControls.swift */; }; + DC65765E2559E2EF00B5B46F /* ForemMediaManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC65765B2559E2EF00B5B46F /* ForemMediaManager.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 */; }; @@ -33,7 +37,6 @@ DCF27D6C25514C8F0065770D /* fetchUserData.js in Resources */ = {isa = PBXBuildFile; fileRef = DCF27D6B25514C8F0065770D /* fetchUserData.js */; }; DCF27D7825519F660065770D /* ForemInstanceMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCF27D7725519F660065770D /* ForemInstanceMetadata.swift */; }; DCF27D802551A0160065770D /* fetchForemInstanceMetadata.js in Resources */ = {isa = PBXBuildFile; fileRef = DCF27D7F2551A0160065770D /* fetchForemInstanceMetadata.js */; }; - DCF27D922551D2190065770D /* ForemMediaManager+LockedScreenControls.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCF27D912551D2190065770D /* ForemMediaManager+LockedScreenControls.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -73,7 +76,6 @@ DC3DAE3825229D8C004DAC13 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; DC3DAE4025229DA5004DAC13 /* ForemWebView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForemWebView.swift; sourceTree = ""; }; DC3DAE4325229DBB004DAC13 /* ForemWebView+WKScriptMessageHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ForemWebView+WKScriptMessageHandler.swift"; sourceTree = ""; }; - DC3DAE4625229DD7004DAC13 /* ForemMediaManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForemMediaManager.swift; sourceTree = ""; }; DC3DAE4D25229E08004DAC13 /* Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; DC3DAE4F25229E08004DAC13 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; DC3DAE5125229E08004DAC13 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; @@ -87,8 +89,12 @@ 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 = ""; }; - DC6576422559CCDC00B5B46F /* ForemMediaManager+PodcastActions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ForemMediaManager+PodcastActions.swift"; 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 = ""; }; DC6576462559CCED00B5B46F /* ForemMediaManager+VideoActions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ForemMediaManager+VideoActions.swift"; sourceTree = ""; }; + DC6576592559E2EF00B5B46F /* ForemMediaManager+PodcastActions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ForemMediaManager+PodcastActions.swift"; sourceTree = ""; }; + DC65765A2559E2EF00B5B46F /* ForemMediaManager+LockedScreenControls.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ForemMediaManager+LockedScreenControls.swift"; sourceTree = ""; }; + DC65765B2559E2EF00B5B46F /* ForemMediaManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ForemMediaManager.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 = ""; }; @@ -98,7 +104,6 @@ DCF27D6B25514C8F0065770D /* fetchUserData.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = fetchUserData.js; sourceTree = ""; }; DCF27D7725519F660065770D /* ForemInstanceMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForemInstanceMetadata.swift; sourceTree = ""; }; DCF27D7F2551A0160065770D /* fetchForemInstanceMetadata.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = fetchForemInstanceMetadata.js; sourceTree = ""; }; - DCF27D912551D2190065770D /* ForemMediaManager+LockedScreenControls.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ForemMediaManager+LockedScreenControls.swift"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -155,6 +160,8 @@ DC3DAE4025229DA5004DAC13 /* ForemWebView.swift */, DC3DAE4325229DBB004DAC13 /* ForemWebView+WKScriptMessageHandler.swift */, DCF27D5B255116EF0065770D /* ForemWebView+WKNavigationDelegate.swift */, + DC6576222559815B00B5B46F /* WebViewHistory.swift */, + DC6576282559898900B5B46F /* URL+QueryParameters.swift */, DC9EF35C2549E013003A1BE7 /* ForemUserData.swift */, DCF27D7725519F660065770D /* ForemInstanceMetadata.swift */, DC3DAE3825229D8C004DAC13 /* Info.plist */, @@ -212,10 +219,10 @@ DC65764D2559CE1E00B5B46F /* Media Manager */ = { isa = PBXGroup; children = ( - DC3DAE4625229DD7004DAC13 /* ForemMediaManager.swift */, - DC6576422559CCDC00B5B46F /* ForemMediaManager+PodcastActions.swift */, + DC65765B2559E2EF00B5B46F /* ForemMediaManager.swift */, + DC6576592559E2EF00B5B46F /* ForemMediaManager+PodcastActions.swift */, DC6576462559CCED00B5B46F /* ForemMediaManager+VideoActions.swift */, - DCF27D912551D2190065770D /* ForemMediaManager+LockedScreenControls.swift */, + DC65765A2559E2EF00B5B46F /* ForemMediaManager+LockedScreenControls.swift */, ); path = "Media Manager"; sourceTree = ""; @@ -394,13 +401,16 @@ files = ( DC9EF35D2549E013003A1BE7 /* ForemUserData.swift in Sources */, DC3DAE4125229DA5004DAC13 /* ForemWebView.swift in Sources */, + DC65765E2559E2EF00B5B46F /* ForemMediaManager.swift in Sources */, + DC6576232559815B00B5B46F /* WebViewHistory.swift in Sources */, DC3DAE4425229DBB004DAC13 /* ForemWebView+WKScriptMessageHandler.swift in Sources */, + DC6576292559898900B5B46F /* URL+QueryParameters.swift in Sources */, + DC65765C2559E2EF00B5B46F /* ForemMediaManager+PodcastActions.swift in Sources */, DCF27D5C255116EF0065770D /* ForemWebView+WKNavigationDelegate.swift in Sources */, DC6576472559CCED00B5B46F /* ForemMediaManager+VideoActions.swift in Sources */, - DC3DAE4725229DD7004DAC13 /* ForemMediaManager.swift in Sources */, DCF27D7825519F660065770D /* ForemInstanceMetadata.swift in Sources */, - DCF27D922551D2190065770D /* ForemMediaManager+LockedScreenControls.swift in Sources */, - DC6576432559CCDD00B5B46F /* ForemMediaManager+PodcastActions.swift in Sources */, + DC6576432559CCDD00B5B46F /* (null) in Sources */, + DC65765D2559E2EF00B5B46F /* ForemMediaManager+LockedScreenControls.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 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 ff6fbf6..fbaeecc 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() + } +}