我想在JavaFx WebView中显示某个网页,但是它保持空白。
我已经在WebView的WebEngine中添加了一个documentListener。这显示了文档已加载。
我在最高级的级别上挖掘了日志,但是我看不到为什么页面无法呈现。
这是完整的代码:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
public class FxBrowserOfficeTest extends Application
{
@Override
public void start( Stage stage ) throws Exception
{
StackPane pane = new StackPane();
WebView view = new WebView();
WebEngine engine = view.getEngine();
engine.load( "https://login.microsoftonline.com/47ef05e2-eef7-412f-b794-3b99f6ab08e7/saml2" );
engine.documentProperty().addListener( new ChangeListener<Document>()
{
@Override
public void changed( ObservableValue<? extends Document> observable, Document oldDocument, Document newDocument )
{
Document doc = engine.getDocument();
if ( doc != null )
{
try
{
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty( OutputKeys.INDENT, "yes" );
transformer.setOutputProperty( "{http://xml.apache.org/xslt}indent-amount", "4" );
DOMSource source = new DOMSource( doc );
ByteArrayOutputStream streamOut = new ByteArrayOutputStream();
StreamResult result = new StreamResult( streamOut );
transformer.transform( source, result );
System.out.println( streamOut.toString().trim() );
}
catch ( Exception e )
{
e.printStackTrace();
}
}
}
} );
//ADDED
System.err.println( "UserAgent: " + engine.getUserAgent() );
System.err.println( "JavaScriptEnabled: " + engine.isJavaScriptEnabled() );
engine.getLoadWorker().stateProperty().addListener( new ChangeListener<Worker.State>()
{
@Override
public void changed( ObservableValue ov, Worker.State oldState, Worker.State newState )
{
System.err.println( "LoadWorker newState: " + newState );
}
} );
// END ADDED
pane.getChildren().add( view );
Scene scene = new Scene( pane, 960, 600 );
stage.setScene( scene );
stage.show();
}
public static void main( String[] args ) throws IOException
{
Application.launch( args );
}
}
我希望显示Microsoft登录页面,但它仍然为空白。
有人知道为什么它保持空白吗?