以下代码用于禁用JavaFX WebView对象中的超链接。但是,当我在移动设备上运行它时它不起作用,而它在桌面上运行正常。任何影响移动设备的替代解决方案?
private void init() {
webEngine = webView.getEngine();
webEngine.getLoadWorker().stateProperty().addListener((ov, oldState, newState) -> {
if(newState == State.SUCCEEDED && webEngine.getDocument() != null)
disableHyperLinks(webEngine.getDocument());
});
} // init()
private void disableHyperLinks(Document document) {
NodeList nodeList = document.getElementsByTagName("a");
for (int i = 0; i < nodeList.getLength(); i++)
{
Node node= nodeList.item(i);
EventTarget eventTarget = (EventTarget) node;
eventTarget.addEventListener("click", (evt) -> {
evt.preventDefault();
}, false);
} // for
} // disableHyperLinks()
答案 0 :(得分:2)
当您在移动设备上运行时,WebView不是使用JavaFX控件实现的,而是在Android和iOS上使用本机版本。
您可以看到here适用于Android的实现,here适用于iOS。
在iOS上没有实现abc[i]
本机方法,它只返回已加载页面的html内容(假设可以解析内容,否则它将为null)。因此,即使您能够阅读和修改该内容,它也不会对实际控制产生任何影响。
好消息是,您可以使用Document
,因为它是implemented适用于iOS。
这样的事情应该有效:
executeScript
但上述代码不适用于Android。有一种(非常hacky)可能的方法,在运行时访问本机控件(但由于问题是iOS,我不会在这里解释)。