2012-11-20 14 views
5

जावाएफएक्स (2.2) वेबव्यू का उपयोग करते समय, जावा कोड के भीतर यूआरएल को सुनने और संभालने का कोई तरीका है?जावाएफएक्स 2 वेबव्यू यूआरएल श्रोता

उदाहरण के लिए: मैं webEngine.loadContent (html) के साथ अपने वेब व्यू में एक स्थानीय HTML फ़ाइल लोड कर रहा हूं। एचटीएमएल में

<script src="local:my-script.js"></script> 
<img src="cms:1234.png"/> 

जो स्थानीय फाइल भी है और जावा एप्लिकेशन से प्रदान किया जाना चाहिए। इसलिए मैं एक श्रोता पंजीकृत करना चाहता हूं जो पृष्ठ से अनुरोधों को संभाल सकता है।

संपादित करें: HTML पृष्ठ के भीतर लोड किया गया संसाधन डेटा सामग्री-प्रबंधन-सिस्टम से आता है ताकि सापेक्ष पथ का उपयोग न हो।

+0

मुझे लगता है कि एक आसान तरीका है: HTML-फ़ाइल के सापेक्ष सभी रेसियोड बनाएं और फ़ाइल को फ़ाइल द्वारा स्थानीय रूप से लोड करें: ///folder/file.html –

उत्तर

5

अपने स्वयं के URL प्रोटोकॉल हैंडलर बनाएँ और का उपयोग कर इसे स्थापित:

URL.setURLStreamHandlerFactory(new HandlerFactory()); 

A New Era for Java URL Protocol Handlers article हैंडलर बनाने के लिए विस्तृत निर्देश प्रदान करता है।

वेबव्यू आपकी सामग्री को लोड करने के लिए आपके कस्टम प्रोटोकॉल का उपयोग कर सकता है।

+0

धन्यवाद, वही है जो मैं खोज रहा हूं। – chrise

1

आपके लिए सबसे आसान तरीका local: संसाधन को लोड करने से पहले एचटीएमएल में रनटाइम मान के साथ प्रतिस्थापित करेगा। उदा .:

public class WebViewLocal extends Application { 
    @Override 
    public void start(Stage primaryStage) { 
     String st = "<html><head><title>X</title>" 
       + "</head><body><img src='local:1.jpg'/>" 
       + "</body></html>"; 
     System.out.println(st); 
     primaryStage.setScene(new Scene(loadHtml(st), 400, 400)); 
     primaryStage.show(); 
    } 

    public WebView loadHtml(String html) { 
     html = html.replace("local:", getClass().getResource(".").toString()); 
     WebView view = new WebView(); 
     view.getEngine().loadContent(html); 
     return view; 
    } 

    public static void main(String[] args) { launch(); } 
} 

N.B .: यह काम कर रहा है नमूना, बस इस फ़ाइल के रूप में एक ही स्थान पर 1.jpg छवि डाल दिया।

यदि आप वास्तव में जावास्क्रिप्ट से जावा क्लास के साथ काम करना चाहते हैं तो आप "जावाएफएक्स से जावास्क्रिप्ट ब्रिज" सुविधा का उपयोग कर सकते हैं। यहाँ ट्यूटोरियल पर एक नज़र डालें: https://blogs.oracle.com/javafx/entry/communicating_between_javascript_and_javafx

+0

धन्यवाद। लेकिन मुझे लगता है कि यह उदाहरण के लिए काम नहीं करेगा जैसी छवियां। किसी भी टेक्स्ट-वैल्यू (स्क्रिप्ट, सीएसएस, ...) के लिए यह काम कर सकता है। – chrise

+0

यह उत्तरदाता इस मामले में सहायता नहीं करेगा: loadContent() केवल एक सामग्री (ब्राउज़र स्थान) लोड करेगा, लेकिन सवाल एक निर्भर संसाधन लोड करने के बारे में है। –

+0

@chrise: यह किसी भी संसाधन के लिए काम करेगा जो छवियों सहित यूआरएल का उपयोग करेगा –

0

आप अपने html फ़ाइल स्थानीय रूप से लोड, तो आप बस संबंधित पथ का उपयोग कर सकते हैं:

यह एक उदाहरण है, जो लोड एचटीएमएल है रिश्तेदार स्क्रिप्ट के साथ। http://code.google.com/p/jfx-gap/source/browse/src/main/java/com/googlecode/jfxgap/JFXGap.java

यह चाल HTML के अंदर सापेक्ष पथ हो सकती है।

+0

हाँ, यह स्थानीय फाइलों के साथ काम करेगा। मैं यह उल्लेख करना भूल गया कि डेटा सामग्री-प्रबंधन-प्रणाली से आता है ताकि अधिक व्यवसाय-तर्क की आवश्यकता हो।एक विचार था कि मैं डेटा प्रदान करने और HTML में सभी पथों को फिर से लिखने के लिए एक छोटा http-server चला रहा था, लेकिन शायद इसके लिए एक बेहतर समाधान है। – chrise