-
Bug
-
Resolution: Fixed
-
P2
-
jfx11, 8u171, 9, 10
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8206390 | 8u192 | Arunprasad Rajkumar | P2 | Resolved | Fixed | b02 |
JDK-8207354 | 8u191 | Arunprasad Rajkumar | P2 | Closed | Fixed | b02 |
A DESCRIPTION OF THE PROBLEM :
the document of the WebEngine return nulls after the PAGE_REPLACED event. Probably because the PAGE_REPLACED events set the boolean invalidate to false which causes the getDocument to always return null.
REGRESSION : Last worked in version 8u162
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Load the following url in the WebEngine https://movies-finder.firebaseapp.com/
After clicking on one of the menu items ( which triggers the PAGE_REPLACED event),
The document of the webEngine returns null
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The document of the webEngine is the same as Document e = (Document) engine.executeScript("document");
ACTUAL -
The document of the webEngine is null
---------- BEGIN SOURCE ----------
import javax.swing.JFrame;
import org.w3c.dom.Document;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
public class TestCase_001 {
public static void main(String[] args) {
Platform.setImplicitExit(false);
JFrame frame = new JFrame("JFXTest");
frame.setSize(1400, 1000);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JFXPanel jfxPanel = new JFXPanel();
Platform.runLater(() -> {
WebView webView = new WebView();
final WebEngine engine = webView.getEngine();
engine.load("https://movies-finder.firebaseapp.com/");
engine.documentProperty().addListener(new ChangeListener<Document>() {
@Override
public void changed(ObservableValue<? extends Document> prop, Document oldDoc, Document newDoc) {
System.out.println("old document " + oldDoc);
System.out.println("new document " + newDoc);
Document e = (Document) engine.executeScript("document");
Document e2 = engine.getDocument();
System.out.println("document from script " + e);
System.out.println("document from engine " + e2);
}
});
Scene scene = new Scene(webView);
jfxPanel.setScene(scene);
});
frame.add(jfxPanel);
frame.setVisible(true);
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Object obj = engine.documentProperty();
System.out.println(Arrays.toString(obj.getClass().getDeclaredMethods()));
Method method = obj.getClass().getDeclaredMethod("invalidate",Boolean.TYPE);
if (method!=null){
method.setAccessible(true);
method.invoke(obj, true);
}
FREQUENCY : always
the document of the WebEngine return nulls after the PAGE_REPLACED event. Probably because the PAGE_REPLACED events set the boolean invalidate to false which causes the getDocument to always return null.
REGRESSION : Last worked in version 8u162
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Load the following url in the WebEngine https://movies-finder.firebaseapp.com/
After clicking on one of the menu items ( which triggers the PAGE_REPLACED event),
The document of the webEngine returns null
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The document of the webEngine is the same as Document e = (Document) engine.executeScript("document");
ACTUAL -
The document of the webEngine is null
---------- BEGIN SOURCE ----------
import javax.swing.JFrame;
import org.w3c.dom.Document;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
public class TestCase_001 {
public static void main(String[] args) {
Platform.setImplicitExit(false);
JFrame frame = new JFrame("JFXTest");
frame.setSize(1400, 1000);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JFXPanel jfxPanel = new JFXPanel();
Platform.runLater(() -> {
WebView webView = new WebView();
final WebEngine engine = webView.getEngine();
engine.load("https://movies-finder.firebaseapp.com/");
engine.documentProperty().addListener(new ChangeListener<Document>() {
@Override
public void changed(ObservableValue<? extends Document> prop, Document oldDoc, Document newDoc) {
System.out.println("old document " + oldDoc);
System.out.println("new document " + newDoc);
Document e = (Document) engine.executeScript("document");
Document e2 = engine.getDocument();
System.out.println("document from script " + e);
System.out.println("document from engine " + e2);
}
});
Scene scene = new Scene(webView);
jfxPanel.setScene(scene);
});
frame.add(jfxPanel);
frame.setVisible(true);
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Object obj = engine.documentProperty();
System.out.println(Arrays.toString(obj.getClass().getDeclaredMethods()));
Method method = obj.getClass().getDeclaredMethod("invalidate",Boolean.TYPE);
if (method!=null){
method.setAccessible(true);
method.invoke(obj, true);
}
FREQUENCY : always
- backported by
-
JDK-8206390 WebEngine document becomes null after PAGE_REPLACED event
- Resolved
-
JDK-8207354 WebEngine document becomes null after PAGE_REPLACED event
- Closed
- relates to
-
JDK-8157686 JavaFX WebView fails to track URL changes for PJAX websites
- Resolved