는 내가 자바 FX의 웹보기와 같은과 스크린 샷을 복용 잠시 후 웹 사이트를로드 해요 :다른 탭에 있기 때문에 표시되지 않더라도 JavaFX의 웹보기 렌더링을 어떻게 만듭니 까?
WritableImage image = webView.snapshot(null, null);
내가 잘 작동하는 웹보기에서 찾고 있다면, 그러나 그것은 존재에 의해 숨겨진 경우 포어 그라운드에 있지 않은 탭에서 (나는 그것을 숨기는 다른 경우에 대해 잘 모르겠다), 스크린 샷은 적절한 사이트이지만 전체적으로 비어 있습니다.
표시되지 않더라도 WebView를 렌더링하려면 어떻게해야합니까?
이 시간 동안 webView.isVisible()
은 true입니다.
isTreeReallyVisible()
라고
WebView
의 방법은 거기에 발견하고 현재이 포함
웹보기가 아닌 전경 탭에있는 숨겨져
private boolean isTreeReallyVisible() {
if (getScene() == null) {
return false;
}
final Window window = getScene().getWindow();
if (window == null) {
return false;
}
boolean iconified = (window instanceof Stage) ? ((Stage)window).isIconified() : false;
return impl_isTreeVisible()
&& window.isShowing()
&& window.getWidth() > 0
&& window.getHeight() > 0
&& !iconified;
}
, impl_isTreeVisible()
는 return 문에서 거짓 (다른 모든 요인입니다 사실입니다.) 그 방법은 Node
에 있으며 다음과 같습니다 : 나는 내 자신의 구현을 제공 impl_treeVisibleProperty()
를 오버라이드 (override) 한 수
/**
* @treatAsPrivate implementation detail
* @deprecated This is an internal API that is not intended for use and will be removed in the next version
*/
@Deprecated
public final boolean impl_isTreeVisible() {
return impl_treeVisibleProperty().get();
}
/**
* @treatAsPrivate implementation detail
* @deprecated This is an internal API that is not intended for use and will be removed in the next version
*/
@Deprecated
protected final BooleanExpression impl_treeVisibleProperty() {
if (treeVisibleRO == null) {
treeVisibleRO = new TreeVisiblePropertyReadOnly();
}
return treeVisibleRO;
}
하지만 WebView
최종, 그래서, 나는 그것에서 상속 할 수 없습니다.
완전히 다른 상황 (아이콘 화됨) 또는 숨겨진 탭에서 완전히 (트레이 바에서 실행중인 것처럼) 스테이지가 완전히 숨겨진 상태입니다. 해당 모드에서 렌더링을 수행 할 수 있더라도 WebView
의 크기가 조정되지 않습니다. webView.resize()
을 호출 한 다음 스크린 샷을 찍고 스크린 샷은 적절한 크기이지만 실제로 렌더링 된 페이지의 크기는 WebView
입니다.
private void addToSceneDirtyList() {
Scene s = getScene();
if (s != null) {
s.addToDirtyList(this);
if (getSubScene() != null) {
getSubScene().setDirty(this);
}
}
}
숨겨진 모드에서, getScene()
반환이 표시되는 때 일어나는 달리 null
:
가 표시 숨겨진 단계에서이 크기 조정 동작을 디버깅, 나는 결국 우리가 포함 Node.addToSceneDirtyList()
에 도착 것을 발견했다. 즉, s.addToDirtyList(this)
이 호출되지 않습니다. 이것이 제대로 크기가 조정되지 않는 이유인지 여부는 확실하지 않습니다.
여기에 버그가 있습니다. 매우 오래된 것입니다 : https://bugs.openjdk.java.net/browse/JDK-8087569하지만 전체적인 문제라고 생각하지 않습니다.
Java 1.8.0_151에서이 작업을 수행하고 있습니다. WebKit이 업그레이드되었다는 것을 이해 했으므로 9.0.1을 다르게 사용하려고 시도했지만 그렇지 않습니다.
탭 패널의 스킨이 어떻게 구현되었는지는 기억이 나지 않지만 설명하는 시나리오에서는 웹보기가 장면에있을 수 없습니다. 이 경우 스냅 샷이 작동하지 않습니다 (단, 스냅 샷을 찍는 동안 일시적으로 웹보기를 장면에 추가 할 수 있습니다). 그것이 여전히 장면의 일부라면, 나는 전혀 모른다 ... –
@James_D는 전혀 모른다 ... 최후의 심판의 날. – Mordechai
헬프가 있으면 확인하십시오. https://stackoverflow.com/questions/40642573/trying-to-render-javafx-webview-to-offscreen-buffer-or-fbo – AsifAli72090