无法在移动设备上禁用JavaFX WebView HyperLink

时间:2018-01-03 14:37:47

标签: ios javafx robovm gluon-mobile javafxports

以下代码用于禁用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()

1 个答案:

答案 0 :(得分:2)

当您在移动设备上运行时,WebView不是使用JavaFX控件实现的,而是在Android和iOS上使用本机版本。

您可以看到here适用于Android的实现,here适用于iOS。

在iOS上没有实现abc[i] 本机方法,它只返回已加载页面的html内容(假设可以解析内容,否则它将为null)。因此,即使您能够阅读和修改该内容,它也不会对实际控制产生任何影响。

好消息是,您可以使用Document,因为它是implemented适用于iOS。

这样的事情应该有效:

executeScript

但上述代码不适用于Android。有一种(非常hacky)可能的方法,在运行时访问本机控件(但由于问题是iOS,我不会在这里解释)。