修改 WKWebView 中不存在的 DOM 个元素
Modifying nonexistant DOM elements in WKWebView
我正在 WKWebView 中显示网页。要隐藏 header 或侧边栏等元素,我正在应用 JavaScript。问题是我对同一站点的多个页面使用一个脚本,而不同类型的页面使用不同的页面元素。如果我这样做:
let scriptURL = NSBundle.mainBundle().pathForResource("myscript", ofType: "js")
let scriptContent = String(contentsOfFile:scriptURL!, encoding:NSUTF8StringEncoding, error: nil)
let script = WKUserScript(source: scriptContent!, injectionTime: .AtDocumentEnd, forMainFrameOnly: true)
config.userContentController.addUserScript(script)
…
document.getElementById("header").style.display = "none";
对于不存在的元素,它会出错并且 JavaScript 的其余部分不会被应用。
你想要这样的东西吗
var header = document.getElementById("header")
if (header) {
header.style.display = "none";
}
在继续之前,您必须检查该元素是否有效。您可以这样定义一个函数,而不是到处放置 if
语句:
var setElementDisplayStyle = function(id, style) {
var element = document.getElementById(id);
if(element) element.style.display = style;
}
用法:
setElementDisplayStyle("header", "none");
我正在 WKWebView 中显示网页。要隐藏 header 或侧边栏等元素,我正在应用 JavaScript。问题是我对同一站点的多个页面使用一个脚本,而不同类型的页面使用不同的页面元素。如果我这样做:
let scriptURL = NSBundle.mainBundle().pathForResource("myscript", ofType: "js")
let scriptContent = String(contentsOfFile:scriptURL!, encoding:NSUTF8StringEncoding, error: nil)
let script = WKUserScript(source: scriptContent!, injectionTime: .AtDocumentEnd, forMainFrameOnly: true)
config.userContentController.addUserScript(script)
…
document.getElementById("header").style.display = "none";
对于不存在的元素,它会出错并且 JavaScript 的其余部分不会被应用。
你想要这样的东西吗
var header = document.getElementById("header")
if (header) {
header.style.display = "none";
}
在继续之前,您必须检查该元素是否有效。您可以这样定义一个函数,而不是到处放置 if
语句:
var setElementDisplayStyle = function(id, style) {
var element = document.getElementById(id);
if(element) element.style.display = style;
}
用法:
setElementDisplayStyle("header", "none");