微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?