修改 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");