JavaFX:从文件加载 html 时如何使用地理定位?

问题描述

时代变了,如今 JavaFX webview 确实支持地理定位(与 2016 年 JavaFX : Does WebView support geolocation? 不同)。

我的问题:如何在不使用 https 而是从文件加载 html 和 JS 时使其工作?

测试代码

JavaFX

public class TestWebView extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("JavaFX WebView Example");

        final WebView HTML5Test = new WebView();
        // https://stackoverflow.com/a/37420816
        HTML5Test.getEngine().load("https://html5test.com");
        
        final WebView geoLocation = new WebView();
        // https://www.w3schools.com/html/html5_geolocation.asp
        final String editor_script = TestWebView.class.getResource("/geolocation.html").toExternalForm();
        geoLocation.getEngine().load(editor_script);

        final VBox vBox = new VBox(HTML5Test,geoLocation);
        final Scene scene = new Scene(vBox,960,600);

        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

和 geolocation.html(另见 https://www.w3schools.com/html/html5_geolocation.asp

<!DOCTYPE html>
<html>
<body>

<p>Click the button to get your coordinates.</p>

<button onclick="getLocation()">Try It</button>

<p id="demo"></p>

<script>
var x = document.getElementById("demo");

function getLocation() {
  if (navigator.geolocation) {
    x.innerHTML = "Calling geolocation...";
    navigator.geolocation.getCurrentPosition(showPosition,showError);
  } else { 
    x.innerHTML = "Geolocation is not supported by this browser.";
  }
}

function showPosition(position) {
  x.innerHTML = "Latitude: " + position.coords.latitude + 
  "<br>Longitude: " + position.coords.longitude;
}

function showError(error) {
  switch(error.code) {
    case error.PERMISSION_DENIED:
      x.innerHTML = "User denied the request for Geolocation.";
      break;
    case error.POSITION_UNAVAILABLE:
      x.innerHTML = "Location information is unavailable.";
      break;
    case error.TIMEOUT:
      x.innerHTML = "The request to get user location timed out.";
      break;
    case error.UNKNowN_ERROR:
      x.innerHTML = "An unkNown error occurred.";
      break;
  }
}
</script>

</body>
</html>

输出为 (JavaFX 14 & 15.1)

  • 完整的 HTML5 测试摘要,上面写着“地理位置:是 ✔”
  • 来自本地文件“正在调用地理定位...”的地理定位,没有进一步的输出

可能可怜的网络引擎正在等待某人在某处回答“允许访问”。知道如何从文件中获得此功能吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...