diff --git a/Mac/MainWindow/Detail/DetailWebViewController.swift b/Mac/MainWindow/Detail/DetailWebViewController.swift
index e7ca8045d..546b4e337 100644
--- a/Mac/MainWindow/Detail/DetailWebViewController.swift
+++ b/Mac/MainWindow/Detail/DetailWebViewController.swift
@@ -73,6 +73,17 @@ final class DetailWebViewController: NSViewController {
}
}
+ static let userScripts: [WKUserScript] = {
+ let appScriptsWorld = WKContentWorld.world(name: "NetNewsWire")
+ let filenames = ["main", "main_mac", "newsfoot"]
+ let scripts = filenames.map { filename in
+ let scriptURL = Bundle.main.url(forResource: filename, withExtension: ".js")!
+ let scriptSource = try! String(contentsOf: scriptURL)
+ return WKUserScript(source: scriptSource, injectionTime: .atDocumentStart, forMainFrameOnly: true, in: appScriptsWorld)
+ }
+ return scripts
+ }()
+
private struct MessageName {
static let mouseDidEnter = "mouseDidEnter"
static let mouseDidExit = "mouseDidExit"
@@ -83,18 +94,23 @@ final class DetailWebViewController: NSViewController {
let preferences = WKPreferences()
preferences.minimumFontSize = 12.0
preferences.javaScriptCanOpenWindowsAutomatically = false
- preferences.javaScriptEnabled = true
+
let configuration = WKWebViewConfiguration()
configuration.preferences = preferences
+ configuration.defaultWebpagePreferences.allowsContentJavaScript = false
configuration.setURLSchemeHandler(detailIconSchemeHandler, forURLScheme: ArticleRenderer.imageIconScheme)
let userContentController = WKUserContentController()
userContentController.add(self, name: MessageName.windowDidScroll)
userContentController.add(self, name: MessageName.mouseDidEnter)
userContentController.add(self, name: MessageName.mouseDidExit)
+ for script in Self.userScripts {
+ userContentController.addUserScript(script)
+ }
configuration.userContentController = userContentController
+
webView = DetailWebView(frame: NSRect.zero, configuration: configuration)
webView.uiDelegate = self
webView.navigationDelegate = self
@@ -327,7 +343,7 @@ private extension DetailWebViewController {
]
let html = try! MacroProcessor.renderedText(withTemplate: ArticleRenderer.page.html, substitutions: substitutions)
- webView.loadHTMLString(html, baseURL: ArticleRenderer.page.baseURL)
+ webView.loadHTMLString(html, baseURL: URL(string: rendering.baseURL))
}
func fetchScrollInfo(_ completion: @escaping (ScrollInfo?) -> Void) {
diff --git a/Mac/MainWindow/Detail/page.html b/Mac/MainWindow/Detail/page.html
index ceaa13f7f..3d71f2c98 100644
--- a/Mac/MainWindow/Detail/page.html
+++ b/Mac/MainWindow/Detail/page.html
@@ -4,14 +4,6 @@
-
-
-
-
diff --git a/Shared/Article Rendering/main.js b/Shared/Article Rendering/main.js
index 13f90b638..1cf76b59c 100644
--- a/Shared/Article Rendering/main.js
+++ b/Shared/Article Rendering/main.js
@@ -168,3 +168,8 @@ function processPage() {
removeWpSmiley()
postRenderProcessing();
}
+
+document.addEventListener("DOMContentLoaded", function(event) {
+ window.scrollTo(0, [[windowScrollY]]);
+ processPage();
+})
diff --git a/iOS/Article/PreloadedWebView.swift b/iOS/Article/PreloadedWebView.swift
index 3bf76a2ca..32eec3fe5 100644
--- a/iOS/Article/PreloadedWebView.swift
+++ b/iOS/Article/PreloadedWebView.swift
@@ -13,7 +13,17 @@ class PreloadedWebView: WKWebView {
private var isReady: Bool = false
private var readyCompletion: (() -> Void)?
-
+
+ static let userScripts: [WKUserScript] = {
+ var scripts = [WKUserScript]()
+ for fileName in ["main.js", "main_ios.js", "newsfoot.js"] {
+ let scriptSource = try! String(contentsOf: baseURL.appending(path: fileName, directoryHint: .notDirectory))
+ let script = WKUserScript(source: scriptSource, injectionTime: .atDocumentStart, forMainFrameOnly: true, in: appScriptsWorld)
+ scripts.append(script)
+ }
+ return scripts
+ }()
+
init(articleIconSchemeHandler: ArticleIconSchemeHandler) {
let preferences = WKPreferences()
preferences.javaScriptCanOpenWindowsAutomatically = false
@@ -26,6 +36,13 @@ class PreloadedWebView: WKWebView {
configuration.mediaTypesRequiringUserActionForPlayback = .audio
configuration.setURLSchemeHandler(articleIconSchemeHandler, forURLScheme: ArticleRenderer.imageIconScheme)
+ let userContentController = WKUserContentController()
+ let appScriptsWorld = WKContentWorld.world(name: "NetNewsWire")
+ for script in Self.userScripts {
+ userContentController.addUserScript(script)
+ }
+ configuration.userContentController = userContentController
+
super.init(frame: .zero, configuration: configuration)
}
diff --git a/iOS/Article/WebViewController.swift b/iOS/Article/WebViewController.swift
index 38b83c1b2..e48dd3471 100644
--- a/iOS/Article/WebViewController.swift
+++ b/iOS/Article/WebViewController.swift
@@ -594,7 +594,7 @@ private extension WebViewController {
]
let html = try! MacroProcessor.renderedText(withTemplate: ArticleRenderer.page.html, substitutions: substitutions)
- webView.loadHTMLString(html, baseURL: ArticleRenderer.page.baseURL)
+ webView.loadHTMLString(html, baseURL: URL(string: rendering.baseURL))
}
diff --git a/iOS/Resources/page.html b/iOS/Resources/page.html
index 686c4612d..b6513009a 100644
--- a/iOS/Resources/page.html
+++ b/iOS/Resources/page.html
@@ -5,15 +5,6 @@
-
-
-
-
diff --git a/xcconfig/common/NetNewsWire_mac_target_common.xcconfig b/xcconfig/common/NetNewsWire_mac_target_common.xcconfig
index b1128ae28..2f25d4d88 100644
--- a/xcconfig/common/NetNewsWire_mac_target_common.xcconfig
+++ b/xcconfig/common/NetNewsWire_mac_target_common.xcconfig
@@ -6,5 +6,5 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon
COMBINE_HIDPI_IMAGES = YES
-MACOSX_DEPLOYMENT_TARGET = 10.15
+MACOSX_DEPLOYMENT_TARGET = 11.0
SDKROOT = macosx;