【发布时间】:2017-01-25 16:02:36
【问题描述】:
我试图通过在整个 javascript 中注入新的 CSS 规则来排除一些网页元素,如侧边栏,我在 xcode 中创建了一个新的 javascript 文件,带有一个新的样式标签来隐藏我在 Google chrome 开发人员工具中检查的侧边栏并结束使用此代码:
var styleTag = document.createElement("style");
styleTag.textContent = '.sidebar {display:none;}';
document.documentElement.appendChild(styleTag);
并创建了 WKWebViewConfiguration 对象,该对象包含一些属性,允许在本机代码和托管 Web 内容之间创建桥梁,如 here 所述,但仍然无法运行此脚本。
这是我完整的 ViewController 代码:
import UIKit
import WebKit
class scrapedBrowser: UIViewController, WKNavigationDelegate {
var webView: WKWebView!
var progressView: UIProgressView!
override func loadView() {
webView = WKWebView()
webView.navigationDelegate = self
view = webView
}
required init?(coder aDecoder: NSCoder) {
let config = WKWebViewConfiguration()
let scriptURL = Bundle.main.path(forResource: "hideSections", ofType: "js")
let scriptContent:String?
do {
scriptContent = try String(contentsOfFile: scriptURL!, encoding: String.Encoding.utf8)
}
catch _ {
scriptContent = nil
}
let script = WKUserScript(source: scriptContent!, injectionTime: .atDocumentStart, forMainFrameOnly: true)
config.userContentController.addUserScript(script)
super.init(coder: aDecoder)
self.webView?.navigationDelegate = self
}
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "http://yourwebsite.com/")!
let request = URLRequest(url: url)
webView.load(request)
webView.allowsBackForwardNavigationGestures = true
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
title = webView.title
}
}
【问题讨论】:
-
有一些对 JSContext 的引用应该对你以后的工作有所帮助。 developer.apple.com/reference/javascriptcore/jscontexthere 上有一个 swift 3 线程
-
感谢@JesseC,这是在 iOS 应用程序中通过 JavaScript 注入 CSS 的一个很好的例子,已经实现了这个并让我的应用程序根据需要运行。
标签: javascript swift3 wkwebview