修改 WKWebView 中不存在的 DOM 元素

Posted

技术标签:

【中文标题】修改 WKWebView 中不存在的 DOM 元素【英文标题】:Modifying nonexistant DOM elements in WKWebView 【发布时间】:2015-07-10 19:16:18 【问题描述】:

我在 WKWebView 中显示一个网页。为了隐藏标题或侧边栏等元素,我正在应用 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 的其余部分不会被应用。

【问题讨论】:

【参考方案1】:

在继续之前,您必须检查该元素是否有效。无需将if 语句放在任何地方,您只需定义一个函数即可:

var setElementDisplayStyle = function(id, style) 
  var element = document.getElementById(id);
  if(element) element.style.display = style;

用法:

setElementDisplayStyle("header", "none");

【讨论】:

【参考方案2】:

你想要这样的东西吗

var header = document.getElementById("header")
if (header) 
    header.style.display = "none";

【讨论】:

以上是关于修改 WKWebView 中不存在的 DOM 元素的主要内容,如果未能解决你的问题,请参考以下文章

DOM2

jQuery检查元素是不是存在[重复]

DOM元素和javascript读取它们的顺序[重复]

React:react-router-dom Typescript 中不存在 useLocation Hook

如何获取硒的角度标签中存在的值[重复]

HTML 输入自动完成在 WKWebview 中不起作用