2013-01-11 37 views
18

Tôi đang làm việc trên ứng dụng xoay bằng cách sử dụng các điều khiển FX của JAVA. Trong ứng dụng của tôi, tôi phải in ra trang html được hiển thị trong webview. Những gì tôi đang cố gắng là tải nội dung html của webview trong một chuỗi với sự giúp đỡ của HtmlDocuement.tải nội dung từ chế độ xem web bằng cách sử dụng javafx

Để tải nội dung của tập tin html từ xem web, tôi đang sử dụng đoạn mã sau nhưng nó không làm việc:

try 
{ 
    String str=webview1.getEngine().getDocment().Body().outerHtml(); 
} 
catch(Exception ex) 
{ 
} 

Trả lời

18

WebEngine.getDocument lợi nhuận org.w3c.dom.Document, không hoạt Javascript tài liệu mà bạn mong đợi xét xử của mã của bạn.

Thật không may, in ra org.w3c.dom.Document yêu cầu khá nhiều mã hóa. Bạn có thể thử giải pháp từ What is the shortest way to pretty print a org.w3c.dom.Document to stdout?, xem mã bên dưới.

Lưu ý rằng bạn cần đợi cho đến khi tài liệu được tải trước khi làm việc với Document. Đây là lý do tại sao LoadWorker được sử dụng ở đây:

public void start(Stage primaryStage) { 
    WebView webview = new WebView(); 
    final WebEngine webengine = webview.getEngine(); 
    webengine.getLoadWorker().stateProperty().addListener(
      new ChangeListener<State>() { 
       public void changed(ObservableValue ov, State oldState, State newState) { 
        if (newState == Worker.State.SUCCEEDED) { 
         Document doc = webengine.getDocument(); 
         try { 
          Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
          transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); 
          transformer.setOutputProperty(OutputKeys.METHOD, "xml"); 
          transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
          transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); 
          transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); 

          transformer.transform(new DOMSource(doc), 
            new StreamResult(new OutputStreamWriter(System.out, "UTF-8"))); 
         } catch (Exception ex) { 
          ex.printStackTrace(); 
         } 
        } 
       } 
      }); 
    webengine.load("http://stackoverflow.com"); 
    primaryStage.setScene(new Scene(webview, 800, 800)); 
    primaryStage.show(); 
} 
+0

phương pháp của bạn sẽ lấy nội dung thiếu nếu trang web có lỗi html ví dụ: Tôi rất quan tâm đến chủ đề này nếu bạn có một sửa chữa xin vui lòng giúp –

38
String html = (String) webEngine.executeScript("document.documentElement.outerHTML"); 
+1

lót này sẽ không làm việc nếu không ở trong công nhân. Sẽ trả lại html trống. Nó cũng sẽ không hoạt động đối với một trang web như google.com. Sẽ không trả về DOM trực tiếp, chỉ có html/javascript bên dưới. – Andy

Các vấn đề liên quan