В продолжение этого похожего вопроса , где было указано, что:
В JavaFXPorts на мобильных устройствах (как Android, так и iOS) элемент управления WebView невстроенный элемент управления JavaFX, но собственный элемент управления
Этот метод можно увидеть в собственной реализации :
- (BOOL)webView:(UIWebView *)wv shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSString *url = [[request URL] absoluteString];
JNIEnv *env = [self getJNIEnv];
if (env != NULL) {
jstring jUrl = createJString(env, url);
(*env)->CallVoidMethod(env, jObject, jmidHasAppProtocolHandler, jUrl);
...
}
, входящей в JavaFX WebEngine
callback :
/**
* check if there is a handler registered for dealing with this protocol.
*/
boolean hasAppProtocolHandler(String url) {
boolean answer = false;
try {
URL u = newURL(null, url);
System.out.println ("[WebEngine] I can handle this protocol for "+url);
u.openConnection();
// location.set(url);
answer = true;
}
// catch (MalformedURLException e) {
catch (Exception e) {
System.out.println ("[WebEngine] I can't handle this protocol for "+url);
// no handler known for this protocol
}
return answer;
}
Это объясняет распечатки консоли: когда можно открыть URL-адрес или когда есть исключение.Кажется, что все различные результаты связаны с тем, как собственный браузер обрабатывает загрузку URL, но вы получаете только эхо в слое JavaFX.
Об использовании WebEngine::getLocation
, обратите внимание, что только после завершения загрузки собственного браузераURL-адрес, уведомление отправляется обратно, и местоположение установлено :
void notifyLoadFinished(String loc, String content) {
synchronized (loadedLock) {
this.pageContent = "<html>"+content+"</html>";
loaded = true;
updateProgress(1.0);
updateState(Worker.State.SUCCEEDED);
location.set(loc); // <--- location from native browser is set
document.invalidate(true);
if (pageListener != null) {
pageListener.onLoadFinished();
}
}
}
Я бы посоветовал вам взглянуть на код JavaFX для WebView
и WebEngine
дляПлатформа iOS, чтобы увидеть, что можно и что нельзя делать.
Например, механизм сценариев может работать, поэтому вы можете выполнить некоторый сценарий, который сообщит некоторую информациюназад.