mirror of
https://github.com/Ranchero-Software/NetNewsWire
synced 2025-08-12 06:26:36 +00:00
Replace old iOS WKWebView flash prevention code with new technique
This commit is contained in:
@@ -31,14 +31,15 @@ class WebViewController: UIViewController {
|
||||
private var topShowBarsViewConstraint: NSLayoutConstraint!
|
||||
private var bottomShowBarsViewConstraint: NSLayoutConstraint!
|
||||
|
||||
var webView: PreloadedWebView? {
|
||||
return view.subviews[0] as? PreloadedWebView
|
||||
var webView: WKWebView? {
|
||||
return view.subviews[0] as? WKWebView
|
||||
}
|
||||
|
||||
private lazy var contextMenuInteraction = UIContextMenuInteraction(delegate: self)
|
||||
public var isFullScreenAvailable: Bool {
|
||||
return traitCollection.userInterfaceIdiom == .phone && coordinator.isRootSplitCollapsed
|
||||
}
|
||||
private lazy var articleIconSchemeHandler = ArticleIconSchemeHandler(coordinator: coordinator);
|
||||
private lazy var transition = ImageTransition(controller: self)
|
||||
private var clickedImageCompletion: (() -> Void)?
|
||||
|
||||
@@ -352,14 +353,6 @@ extension WebViewController: UIContextMenuInteractionDelegate {
|
||||
|
||||
extension WebViewController: WKNavigationDelegate {
|
||||
|
||||
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
|
||||
for (index, view) in view.subviews.enumerated() {
|
||||
if index != 0, let oldWebView = view as? PreloadedWebView {
|
||||
oldWebView.removeFromSuperview()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
|
||||
|
||||
if navigationAction.navigationType == .linkActivated {
|
||||
@@ -517,6 +510,7 @@ private extension WebViewController {
|
||||
return
|
||||
}
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
coordinator.webViewProvider.dequeueWebView() { webView in
|
||||
|
||||
webView.ready {
|
||||
@@ -556,10 +550,60 @@ private extension WebViewController {
|
||||
}
|
||||
|
||||
}
|
||||
=======
|
||||
let preferences = WKPreferences()
|
||||
preferences.javaScriptCanOpenWindowsAutomatically = false
|
||||
>>>>>>> Stashed changes
|
||||
|
||||
/// The defaults for `preferredContentMode` and `allowsContentJavaScript` are suitable
|
||||
/// and don't need to be explicitly set.
|
||||
/// `allowsContentJavaScript` replaces `WKPreferences.javascriptEnabled`.
|
||||
let webpagePreferences = WKWebpagePreferences()
|
||||
|
||||
let configuration = WKWebViewConfiguration()
|
||||
configuration.defaultWebpagePreferences = webpagePreferences
|
||||
configuration.preferences = preferences
|
||||
configuration.setValue(true, forKey: "allowUniversalAccessFromFileURLs")
|
||||
configuration.allowsInlineMediaPlayback = true
|
||||
configuration.mediaTypesRequiringUserActionForPlayback = .audio
|
||||
if #available(iOS 15.4, *) {
|
||||
configuration.preferences.isElementFullscreenEnabled = true
|
||||
}
|
||||
configuration.setURLSchemeHandler(articleIconSchemeHandler, forURLScheme: ArticleRenderer.imageIconScheme)
|
||||
|
||||
let webView = WKWebView(frame: self.view.bounds, configuration: configuration)
|
||||
webView.isOpaque = false;
|
||||
webView.backgroundColor = .clear;
|
||||
|
||||
// Add the webview - using autolayout will cause fullscreen video to fail and lose the web view
|
||||
webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
|
||||
self.view.insertSubview(webView, at: 0)
|
||||
|
||||
// UISplitViewController reports the wrong size to WKWebView which can cause horizontal
|
||||
// rubberbanding on the iPad. This interferes with our UIPageViewController preventing
|
||||
// us from easily swiping between WKWebViews. This hack fixes that.
|
||||
webView.scrollView.contentInset = UIEdgeInsets(top: 0, left: -1, bottom: 0, right: 0)
|
||||
|
||||
webView.scrollView.setZoomScale(1.0, animated: false)
|
||||
|
||||
self.view.setNeedsLayout()
|
||||
self.view.layoutIfNeeded()
|
||||
|
||||
// Configure the webview
|
||||
webView.navigationDelegate = self
|
||||
webView.uiDelegate = self
|
||||
webView.scrollView.delegate = self
|
||||
self.configureContextMenuInteraction()
|
||||
|
||||
webView.configuration.userContentController.add(WrapperScriptMessageHandler(self), name: MessageName.imageWasClicked)
|
||||
webView.configuration.userContentController.add(WrapperScriptMessageHandler(self), name: MessageName.imageWasShown)
|
||||
webView.configuration.userContentController.add(WrapperScriptMessageHandler(self), name: MessageName.showFeedInspector)
|
||||
webView.configuration.userContentController.addUserScript(forResource: "inject", withExtension: "js")
|
||||
|
||||
self.renderPage(webView)
|
||||
}
|
||||
|
||||
func renderPage(_ webView: PreloadedWebView?) {
|
||||
func renderPage(_ webView: WKWebView?) {
|
||||
guard let webView = webView else { return }
|
||||
|
||||
let theme = ArticleThemesManager.shared.currentTheme
|
||||
|
||||
Reference in New Issue
Block a user