WebView 总是在移动设备上出现 - 可能的错误

Posted

技术标签:

【中文标题】WebView 总是在移动设备上出现 - 可能的错误【英文标题】:WebView always brings itself to front on Mobile Devices - Possible Bug 【发布时间】:2017-01-27 15:47:32 【问题描述】:

在我的代码中,我有一个 webview,在它上面我放置了另一个带有标签的窗格,如下所示。 尽管在 Windows 中它可以正常工作并且符合预期,但在移动平台(ios 测试)上,WebView 总是出现在前面,而忽略了它上面的节点。我想这是一种错误,但我将不胜感激任何克服这个问题的想法,直到它被修复。提前致谢。源码可以从here下载。

【问题讨论】:

【参考方案1】:

iOS/android 上的 WebView 控件使用原生控件,这意味着它是 OS 原生层的一部分。例如,在 iOS 上查看 WebView implementation。

它可以添加到 JavaFX 层之前,也可以添加到 JavaFX 层之后,并且它的 z 顺序高于所有其他 JavaFX 视觉效果。

在任何情况下,它都不会参与 JavaFX 层内的 Z 排序:对任何 JavaFX 控件/容器进行排序都不会解决这个问题,它将始终位于其中任何一个之上。

唯一的建议是您应该尽量避免在 WebView 上添加 JavaFX 组件,同时避免将 WebView 控件放置在允许侧面弹出或对话框的视图中。

【讨论】:

我想要这个的原因是因为我在另一个项目中有一个“加载窗格”,只要用户等待页面加载或请求完成,它就会出现在所有内容的顶部。一些用户没有意识到他们通过 webview 提交了一些东西,导致“加载窗格”没有出现。其他一些人认为它只是挂在那里。这是个问题:) 确实如此,但您需要找到不同的方法,也许使用进度指示器。检查AppBar,它包含在加载 Web 视图时显示进度指示的 API(从 4.2.0 开始)。 有没有办法在 webview 中加载进度指示器? 仅当您将其加载为 html 内容时 可能我会这样做,因为我希望在等待时与其余应用程序保持一致。谢谢何塞【参考方案2】:

由于 JavaFX WebView 不参与 Z 排序并且总是出现在所有其他人之上(请参阅 Jose Pereda 答案),作为临时解决方案,我决定隐藏 WebView 并显示我的“加载窗格”每当在 WebView 中进行加载时。

这是我如何在代码中实现它的示例:

public class WebViewController 

   @FXML
   protected WebView webView;

   @FXML
   private void initialize() 
       WebEngine webEngine = webView.getEngine();
       webEngine.getLoadWorker().stateProperty().addListener((ov, oldState, newState) -> 

            webView.setVisible(newState == State.SUCCEEDED);
            loadingPane.setVisible(newState == State.RUNNING);

        );
    // initaliaze()
 // class WebViewController

【讨论】:

以上是关于WebView 总是在移动设备上出现 - 可能的错误的主要内容,如果未能解决你的问题,请参考以下文章

适用于所有移动设备的Webview App并上传到Play商店

WebView 在模拟器中加载但不在设备中

为啥连接不到本机的mongodn数据库,总是报connect fail的错

viewport简介

在 iOS 设备中,在 WebView 中打开内容时获取 _userSettingsForUser 移动

了解viewport概念