Я пытаюсь открыть веб-просмотр для auth v2 от Microsoft.Загружается нормально в браузере, но в JavaFX WebView (JDK 8) страница пуста.Как только я включил вывод консоли, я вижу много строк, таких как для CSS и JS.
[null:0] Cannot load stylesheet https://secure.aadcdn.microsoftonline-p.com/ests/2.1.8148.16/content/cdnbundles/converged.v2.login.min_t7iocdq0wq2qh0nv233jig2.css. Failed integrity metadata check.
Я относительно уверен, что проблема связана с CORS (я загружаю microsoftonline.com
, а ресурсы находятся на microsoftonline-p.com
).Я пробовал все возможные исправления, которые мог придумать или найти в Интернете.
Я пытался установить все эти
engine.setJavaScriptEnabled(true)
engine.setUserAgent("AppleWebKit/537.44")
System.setProperty("sun.net.http.allowRestrictedHeaders", "true")
Я также установил свойство с помощью -Dsun.net.http.allowRestrictedHeaders=true
в VMOptions
(как видно здесь ) и из выпуска JavaFX JDK-8096797
Свойство отображается как установлено:
println(System.getProperty("sun.net.http.allowRestrictedHeaders"))
выводит true
на распечатку консоли.
Все еще без изменений, когда-либо в выводе страницы, это всегда белый пустой экран и те же ошибки из веб-консоли.
Я думаю, что я нашел строки ошибок в WebKit (см. matchIntegrityMetadata
) даже, но это не помогло мне решить проблему, потому что я не знаю, как отключить целостность проверки .
Это действительно, действительно, поставило меня в тупик.Любая помощь очень приветствуется.
Для справки, вот весь метод:
private fun WebView.authWindow(provider: Oath2Account){
engine.setUserAgent("AppleWebKit/537.44")
engine.setJavaScriptEnabled(true)
URLPermission("https://*.com")
System.setProperty("sun.net.http.allowRestrictedHeaders", "true")
Platform.runLater {
engine.userDataDirectory = File("C:\\users\\eric\\javafx_tmp")
engine.setOnError { println("IN PAGE ERROR --> $it") }
engine.setOnAlert { println("IN PAGE ALERT --> $it") }
engine.setConfirmHandler { println("IN PAGE CONFIRM HANDLER --> $it")
true
}
engine.setCreatePopupHandler { println("IN PAGE POPUP --> $it")
engine}
engine.setOnResized { println("IN PAGE RESIZED --> $it") }
engine.setOnStatusChanged { println("IN PAGE STATUS CHANGED --> $it")
println("\t${it.data}")
println("\t${it.source}")
println("\t${it.eventType}")
println("\t${it.target}")
println("\t${it.isConsumed}")
}
engine.setOnVisibilityChanged { println("IN PAGE VISIBILITY CHANGED --> $it") }
engine.setPromptHandler { println("IN PAGE PROMPTED --> $it")
"HELLO"}
println("JavaScript engine status: ${engine.isJavaScriptEnabled}")
println("engine is loading $loadURL")
engine.locationProperty().addListener { observable, oldLocation, newLocation->
println("observable=$observable\noldLocation=$oldLocation\nnewLocation=$newLocation")
// if (newLocation.startsWith("urn:ietf:wg:oauth:2.0:oob")) {
// val code:get
// val title:from
// val accessToken = service.getAccessToken(verifier)
// doSomething(accessToken.getAccessToken())
// }
}
com.sun.javafx.webkit.WebConsoleListener.setDefaultListener { webview, message, lineNumber, sourceId -> println("Console: [$sourceId:$lineNumber] $message") }
engine.setOnError({ event -> System.out.println(event.getMessage()) })
try{
engine.load(loadURL )
} catch (e: IOException) {
println("caught error:")
e.printStackTrace();
}
}