Javascript 在webview中动态隐藏部分html
我正在开发一个概念验证功能,以添加隐藏web视图中加载的网页的一部分的功能,但我无法让它工作 我在UIWebview扩展中有类似的东西,在webview完成加载时调用它:Javascript 在webview中动态隐藏部分html,javascript,ios,css,swift,Javascript,Ios,Css,Swift,我正在开发一个概念验证功能,以添加隐藏web视图中加载的网页的一部分的功能,但我无法让它工作 我在UIWebview扩展中有类似的东西,在webview完成加载时调用它: let dummyStyle = "var dummyStyle = document.createElement('style'); dummyStyle.innerHTML = 'div {display: none;}'; document.body.appendChild(dummyStyle); "
let dummyStyle = "var dummyStyle = document.createElement('style'); dummyStyle.innerHTML = 'div {display: none;}'; document.body.appendChild(dummyStyle); "
let classToHide = "content"
let jsHideString = "var e = document.body.getElementByClassName('\(classToHide)'); e.style = dummyStyle; e.style.display = 'none';"
self.stringByEvaluatingJavaScriptFromString(dummyStyle + jsHideString)
主要问题似乎是(通过safari/chrome开发工具检查)文档元素没有样式属性。即使我在控制台中手动设置它,当e.style.display='none'时它也不会更新
除了搜索元素id或类之外,我还希望尽量减少对最终用户web页面的假设
谢谢你阅读我的问题
使用工作解决方案编辑:
let classToHide = "content"
let jsHideString = " " +
" var e = document.body.getElementsByClassName(\"\(classToHide)\")[0];" +
"e.style.display = \"none\";"
let DOMContentLoadedNotification = " " +
"var addL = function addListener(obj, eventName, listener) { " +
"if (obj.addEventListener) { " +
"alert('added listener');" +
"obj.addEventListener(eventName, listener, false); " +
"} else { " +
"alert('attactch event');" +
"obj.attachEvent(\"on\" + eventName, listener); " +
"};" +
"};" +
"var completion = function finishedDCL() { " +
"alert('finishedDCL');" +
jsHideString +
"};" +
"if (document.readyState == \"complete\" || document.readyState == \"loaded\") { " +
"alert('document already loaded');" +
jsHideString +
"} else {" +
"alert('document not loaded');" +
"addL(document, \"DOMContentLoaded\", completion()); " +
"};"
print("Webview: \(self.stringByEvaluatingJavaScriptFromString(DOMContentLoadedNotification))")
不生成样式表,只需直接操作DOM节点的
.style
属性
设置nodeReference.style.display='none'
没有样式属性的问题一定是您没有等待DOM准备就绪。注意DOMContentLoaded事件
谢谢您提供的信息!