2011-03-23 13 views
5

मुझे विंडोज -7 अंक को हल करने में आपकी विशेषज्ञता की जरुरत है।विंडोज 7 में जावा से स्थानीय HTML फ़ाइल में यूआरएल पैरामीटर कैसे पास करें?

परिदृश्य: मेरे पास एक फ्रेम-आधारित सहायता पैकेज है जो संदर्भ-संवेदनशील सहायता कॉल के लिए स्थापित है। एक जावा एप्लिकेशन यह नियंत्रित करने में सक्षम है कि कौन सा पेज हेल्प पैकेज खुलता है जो वांछित एचटीएमएल नामक एक टैग को पास करके गुजरता है जिसे पॉपलप नामक एचटीएमएल फाइल में एंकर किया जाता है। इस फ़ाइल में जावास्क्रिप्टिंग है जो यूआरएल के अंत से पास टैग पढ़ता है और इसे मदद पैकेज में उचित HTML फ़ाइल में मैप करता है और इसे खोलता है।

मुद्दा: उपरोक्त परिदृश्य Windows XP में काम करता है, लेकिन अब Windows 7.

जावा अनुप्रयोग से कॉलिंग तंत्र में: rundll32 url.dll, FileProtocolHandler फ़ाइल: //filepath/pophelp.html टैग

निष्कर्षों का सारांश अब तक: ऐसा प्रतीत होता है कि url.dll अब विंडोज 7 में यूआरएल के साथ पैरामीटर को पारित करने की अनुमति नहीं देता है। पैरामीटर छीन रहे हैं। मैंने Java.getDesktop() का उपयोग कर उसी प्रकार की कॉल का भी प्रयास किया। जावा से ब्राउज() ब्राउज़ करें, लेकिन यह भी .html के बाद सभी पैरामीटर को बंद करना प्रतीत होता है।

नमूना कोड:

मूल कॉल कि Windows XP में काम करता है -

आदेश चल रहा है: rundll32 url.dll, FileProtocolHandler file: // C: \ Program Files \ अनुप्रयोग System \ ऐप-एडिटर-8.0.1 \ help \ pophelp.html? TAG = callubflow

परिणाम:? TAG = callubflow पास नहीं हुआ है। ।)()

नए कोड Desktop.getDesktop का उपयोग कर ब्राउज़ (-

public static void main(String[] args) { 

    String url = "file:///C:/Program Files/App System/App-Editor-8.0.1/help/pophelp.html?TAG=callsubflow"; 

    try { 
     if (Desktop.isDesktopSupported()) { 
      Desktop desktop = Desktop.getDesktop(); 
        if (desktop.isSupported(Desktop.Action.BROWSE)) { 
         desktop.browse(new URI(url.replace(" ", "%20"))); 
      } 
     } 

    } catch (IOException e) { 
     System.out.println("Unable to open "+url+": "+e.getMessage()); 

    } catch (URISyntaxException e) { 
     e.printStackTrace(); 
    } 

} 

परिणाम:? टैग = callsubflow नहीं पहुंचेगी।

किसी भी सहायता की सराहना की जाएगी!

+2

बेसिक सर्विस सेवा [जावा पर Google] (http://www.google.com/search?q=java) के लिए काम करने लगता है, तो ऐसा लगता है कि ऐसा लगता है स्थानीय फाइलों के लिए विशिष्ट है। उस स्थिति में, मेरा डब्ल्यूएजी यह है कि यह किसी प्रकार का 'सुरक्षा अपग्रेड' था (हालांकि मुझे इसे समझाने के लिए मत कहें) जहां यह स्थानीय फाइलों के लिए बदला गया था। –

+0

मैं वही सोच रहा था, लेकिन यह पागल लग रहा था कि जब आपको इसकी आवश्यकता हो तो यह काम करने के लिए कोई कामकाज या सेटिंग नहीं है। मुझे अपने कंप्यूटर को यह नहीं लगता कि मैं क्या कर सकता हूं और पूर्ण शर्तों में नहीं कर सकता। –

उत्तर

2

मैं वास्तव में यह नहीं बता सकता कि विंडोज स्थानीय फ़ाइलों पर पैरामीटर क्यों हटाता है। जैसा कि टिप्पणियों में बताया गया है कि यह सीम सुरक्षा के लिए किसी तरह के अजीब प्रतिबंध हैं। लेकिन मुझे एक बार एक ही समस्या थी और मुझे एक कामकाज मिला जो इस स्थिति में भी फिट बैठता है।
बस एक स्थानीय अस्थायी HTML फ़ाइल (पैरामीटर के बिना) बनाएं जो आपको वांछित (पैरामीटर के साथ) पर रीडायरेक्ट करे।

String url = "file:///C:/Program Files/App System/App-Editor-8.0.1/help/pophelp.html?TAG=callsubflow"; 

if (Desktop.isDesktopSupported()) { 
    Desktop desktop = Desktop.getDesktop(); 
    if (desktop.isSupported(Desktop.Action.BROWSE)) { 
     desktop.browse(createRedirectTempFile(url.replace(" ", "%20"))); 
    } 
} 
1

मैं एक समाधान है, नहीं एक त्वरित (या बहुत) समाधान है, लेकिन एक समाधान:

// creates w3c conform redirect HTML page 
public String createRedirectPage(String url){ 
    return "<!DOCTYPE HTML>" + 
      "<meta charset=\"UTF-8\">" + 
      "<meta http-equiv=\"refresh\" content=\"1; url=" + url + "\">" + 
      "<script>" + 
      "window.location.href = \"" + url + "\"" + 
      "</script>" + 
      "<title>Page Redirection</title>" + 
      "<!-- Note: don't tell people to `click` the link, just tell them that it is a link. -->" + 
      "If you are not redirected automatically, follow the <a href='" + url + "'>link</a>"; 
} 

// creates temporary file with content of redirect HTML page 
public URI createRedirectTempFile(String url) {   
    BufferedWriter writer = null; 
    File tmpFile = null; 
    try { 
     // creates temporary file 
     tmpFile = File.createTempFile("pophelp", ".html", null); 
     // deletes file when the virtual machine terminate 
     tmpFile.deleteOnExit(); 
     // writes redirect page content to file 
     writer = new BufferedWriter(new FileWriter(tmpFile)); 
     writer.write(createRedirectPage(url)); 
     writer.close(); 
    } 
    catch (IOException e) { 
     return null; 
    } 
    return tmpFile.toURI(); 
} 

अब आप इस तरह इन का उपयोग कर सकते हैं:
इन दोनों तरीकों पर एक नज़र डालें फिर भी :)

rundll32 url.dll,FileProtocolHandler जब http/s प्रोटोकॉल (rundll32 url.dll,FileProtocolHandler http://www.google.com?q=google कोशिश) के साथ URL का उपयोग पैरामीटर पारित करता है, इसलिए आप कर सकते हैं सेटअप छोटे http सर्वर (की तरहमुझे लगता है)

rundll32 url.dll,FileProtocolHandler http://localhost:[helpServerIp]/help/pophelp.html?TAG=callsubflow 
संबंधित मुद्दे