问题描述
时代变了,如今 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)
可能可怜的网络引擎正在等待某人在某处回答“允许访问”。知道如何从文件中获得此功能吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)