javafx

2013-01-11 20 views
18

का उपयोग कर वेबव्यू से सामग्री प्राप्त करें मैं जावा एफएक्स नियंत्रणों का उपयोग कर स्विंग एप्लिकेशन पर काम कर रहा हूं। मेरे आवेदन में मुझे वेबव्यू में प्रदर्शित एचटीएमएल पेज को प्रिंट करना होगा। मैं जो कोशिश कर रहा हूं वह है एचटीएमएल डॉक्यूमेंट की मदद से स्ट्रिंग में वेबव्यू की एचटीएमएल सामग्री लोड करना।javafx

वेब दृश्य से html फ़ाइल की सामग्री लोड करने के लिए, मैं निम्नलिखित कोड का उपयोग कर रहा है, लेकिन इसके काम नहीं कर रहा:

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

उत्तर

18

WebEngine.getDocument रिटर्न जो आप अपने कोड से पहचानने की उम्मीद org.w3c.dom.Document, नहीं जावास्क्रिप्ट दस्तावेज़।

दुर्भाग्यवश, org.w3c.dom.Document को मुद्रित करने के लिए बहुत कुछ कोडिंग की आवश्यकता है। आप What is the shortest way to pretty print a org.w3c.dom.Document to stdout? से समाधान का प्रयास कर सकते हैं, नीचे दिए गए कोड को देखें।

ध्यान दें कि Document के साथ काम करने से पहले दस्तावेज़ लोड होने तक आपको प्रतीक्षा करने की आवश्यकता है। यही कारण है कि LoadWorker यहाँ प्रयोग किया जाता है:

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

आपका विधि यदि साइट एचटीएमएल पूर्व में त्रुटियाँ हैं लापता सामग्री प्राप्त कर देगा: मैं इस विषय के बारे में बहुत चिंतित हूँ अगर आप एक ठीक कृपया कृपया –

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

इस एक लाइनर मदद की है एक कर्मचारी में नहीं तो काम नहीं करेगा। खाली एचटीएमएल वापस कर देगा। यह google.com जैसी साइट के लिए भी काम नहीं करेगा। लाइव डोम वापस नहीं लौटाएगा, केवल अंतर्निहित एचटीएमएल/जावास्क्रिप्ट। – Andy