2012-11-22 13 views
6

सफलतापूर्वक एक एप्लेट अच्छे पुराने का उपयोग करता है को बनाए रखने के कई वर्षों के बाद deployJava.runApplet का उपयोग करना:विशिष्ट तत्व को लक्षित करने के

एक जावा एप्लेट एम्बेड करने के
<script src="foo.js"></script> 

विधि, हम अपने कान को कवर किया और गाने के लिए "में असमर्थ हैं ला ला ला! " अब और।

यह का उपयोग करने की समय आ गया है:

deployJava.runApplet() 

जब मैं एक क्लिक हैंडलर का उपयोग कर इस विधि आग (यहाँ jQuery के माध्यम से एक बटन पर एक घटना श्रोता का उपयोग कर, लेकिन यह कोई फर्क नहीं पड़ता):

$('#button').click(function() { 
    deployJava.runApplet(attributes, parameters, version); 
}); 

... यह पूरे मौजूदा दस्तावेज़ को मिटा देता है और इसे एप्लेट के साथ बदल देता है। मुझे यह जानने की ज़रूरत है कि एप्लेट के लिए कंटेनर होने के लिए एक विशिष्ट डीओएम तत्व को कैसे लक्षित किया जाए, ताकि मेरा पृष्ठ मिटा न जाए।

ऐसा लगता है कि यह एक विशेषता होगी जिसे मैं target: someElement के रूप में पारित कर सकता हूं, जहां "कुछ एलीमेंट" या तो एक DOM ऑब्जेक्ट या स्ट्रिंग के रूप में तत्व की आईडी है। लेकिन हां, मुझे ऐसी विशेषता के लिए दस्तावेज़ीकरण नहीं मिल रहा है।

पूरा किया जा रहा है के लिए, यहाँ क्या पारित किया जा रहा है:

/*here is where I imagine there might be an applicable attribute */ 
var attributes = { 
    name: "SomeName", 
    code: "some.class", 
    archive: "some.jar", 
    width: 640, 
    height: 400 
}; 

var parameters = { 
    someParameter: someValue 
}; 

var version = "1.5"; 

मैं document.write सब कुछ मैं एक दस्तावेज़ के पुनर्निर्माण की जरूरत सकता है, लेकिन मुझे यकीन है कि आप सभी अच्छी तरह से कल्पना कर सकते हैं कि कैसे घृणित है कि संभावना लगती हूँ मुझे।

किसी भी पॉइंटर्स की बहुत सराहना की जाएगी।

+0

थोड़ा और कोड और कम पाठ बेहतर होता :-) – fvu

+0

बात करने के लिए कोई कोड नहीं है। हालांकि, मैं आपको दिखाने के लिए बस अपडेट करूंगा। ;-) –

+1

देखें [dtjava.js] (http://docs.oracle.com/javafx/2/deployment/deployment_toolkit.htm#FBJHAIHG), तैनात जावा के छोटे भाई जो दस्तावेज नहीं करते हैं। – fvu

उत्तर

6

Christophe Roussy समाधान के विकल्प के रूप में आप चलाते समय document.write पर ओवरराइड कर सकते हैं।

तो जैसा: तो

function docWriteWrapper(func) { 
    var writeTo = document.createElement('del'), 
     oldwrite = document.write, 
     content = ''; 
    writeTo.id = "me"; 
    document.write = function(text) { 
     content += text; 
    } 
    func(); 
    writeTo.innerHTML += content; 
    document.write = oldwrite; 
    document.body.appendChild(writeTo); 
} 

एक:

docWriteWrapper(function() { 
    deployJava.runApplet(attributes, parameters, "1.6"); 
}); 

थोड़ा सा hackish लेकिन एक आकर्षण की तरह काम करता है;)

+0

वाह, समय बिताने के लिए धन्यवाद और इसका उत्तर दें, कोल्या! निश्चित रूप से कम से कम कोशिश कर लायक! मैं बहुत भूल गया हूं, इसलिए मैं एक अंग पर बाहर जा रहा हूं और इसे "स्वीकार" कर रहा हूं ... निश्चित रूप से कोड दृश्य निरीक्षण पर व्यवहार्य दिखता है। :) –

+0

एक तरफ ध्यान दें, उत्पाद जल्द ही बाद में जेएनएलपी पर स्विच करने जा रहा है, लेकिन मुझे लगता है कि हमारे पास हमेशा एक एप्लेट विकल्प होगा। –

4

तो समस्या का मूल यह है: deployJava.js document.write का उपयोग करता है। यदि आप पृष्ठ को प्रस्तुत करने के बाद इस विधि का उपयोग करते हैं (प्रारंभिक पृष्ठ प्रस्तुत करने के हिस्से के रूप में बनाम) यह पहले दस्तावेज़ को साफ़ करेगा। जो स्पष्ट नकारात्मक repurcussions है।

हालांकि जावाएफएक्स के लिए इरादा है, लोगों ने dtjava.js के साथ सफलता की सूचना दी है, और मेरे पास यह मानने का हर कारण है कि यह एक व्यवहार्य विकल्प है।

हालांकि, मेरी टीम के अन्य हितधारकों ने पहले से ही काम कर रहे हैं java.js और उस काम को फेंकने के लिए तैयार नहीं हैं, जिसका मतलब है कि मुझे java.js को तैनात करने की आवश्यकता है। ऐसा करने का केवल एक ही तरीका है: सुनिश्चित करें कि पेज को प्रस्तुत करने के दौरान जावा को बुलाया जाता है, न कि अजाक्स, ईवेंट या अन्य देरी ट्रिगर के माध्यम से।

अंत में, हम अपनी जानकारी एकत्र कर रहे हैं, और इसे दूसरे पृष्ठ पर भेज रहे हैं जो एप्पल को अपेक्षित रूप से प्रस्तुत करेगा। यह काम करता है, और ज्यादातर परिदृश्यों में हमारे ग्राहक इसे किसी भी तरह से कर रहे हैं (जानकारी एकत्रित करना, इसे सर्वर-साइड पास करना और रीडायरेक्ट प्रतिक्रिया प्राप्त करना), इसलिए इस मुद्दे को मजबूर करने के लिए यह समझ में नहीं आया। हम क्वेरी स्ट्रिंग के माध्यम से जानकारी उत्तीर्ण कर रहे हैं, लेकिन यदि आप खिड़की चाहते थे तो आप कुकीज़ और/या लोकलस्टोर एपीआई का उपयोग कर सकते हैं। क्लीनर दिखने के लिए स्थान।

उत्तर के लिए धन्यवाद, भले ही वे टिप्पणी क्षेत्र में थे। अगर किसी के पास ऐसा करने का बेहतर तरीका है तो अन्य उत्तरों को अभी भी बोर्ड पर ले जाया जा रहा है!

1

इस कष्टप्रद मुद्दे को हल करने के लिए मैंने डाउनलोड किया और तैनात किया जावा।लाइन 316 पर js, मेरे अपने द्वारा लाइन की जगह:

// document.write(n + "\n" + p + "\n" + r); 
    myDiv.append(n + "\n" + p + "\n" + r); 

कहाँ myDiv runApplet कॉल करने से पहले एक js वैश्विक चर वांछित div करने के लिए सेट है:

myDiv = jQuery('#someDiv'); 

आप एक कम दखल समाधान करते मिल जाए मुझे पता है ...

+0

इसने वादा किया है! ऐसा नहीं है कि वे java.js को तैनात करते रहें और हमें हर बार फिक्स में हैकिंग के बारे में चिंता करनी होगी ...;) धन्यवाद, क्रिस्टोफ़। –

+0

जैसा कि मैंने इसे डाउनलोड किया है, यह मेरा अपडेट करने का निर्णय होगा, लेकिन यह हमेशा इस तरह के घुसपैठ करने वाले हैक्स के साथ एक मुद्दा है और किसी भी तरह से दस्तावेज किया जाना चाहिए। –

+0

सहमत हुए। सुझाव के लिए फिर से धन्यवाद, क्रिस्टोफ़! –

3

आप jQuery का उपयोग कर और एक विशिष्ट लक्षित करना चाहते हैं, तो डोम तत्व, बस संलग्न करने के बजाय:

function docWriteWrapper(jq, func) { 
    var oldwrite = document.write, content = ''; 
    document.write = function(text) { 
     content += text; 
    } 
    func(); 
    document.write = oldwrite; 
    jq.html(content); 
} 

docWriteWrapper($('#mydiv'), function() { 
    deployJava.runApplet(attributes, parameters, version); 
}); 
+0

उत्तर के लिए धन्यवाद! यह मजाकिया है कि कुछ प्रश्नों में धीमी जलती है, और लोग समस्याओं को हल करने के लिए चालाक तरीकों को देखते रहते हैं। बहुत सराहना की! –

+0

यह पूरी तरह से काम किया, और वास्तव में क्या प्रदान किया गया था प्रदान करता है। – Derrick

संबंधित मुद्दे