2010-07-15 11 views
11

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

function createPlayer(parentElem) 
{ 
    // The abc variable is declared and set here 

    player = document.createElement('object'); 
    player.setAttribute("classid", "java:TunePlayer.class"); 
    player.setAttribute("archive", "TunePlayer.class,PlayerListener.class,abc4j.jar"); 
    player.setAttribute("codeType", "application/x-java-applet"); 
    player.id = "tuneplayer"; 
    player.setAttribute("width", 1); 
    player.setAttribute("height", 1); 

    param = document.createElement('param'); 
    param.name = "abc"; 
    param.value = abc; 
    player.appendChild(param); 

    param = document.createElement('param'); 
    param.name = "mayscript"; 
    param.value = true; 
    player.appendChild(param); 

    parentElem.appendChild(player); 
} 

उत्तर

1

मैंने कुछ ऐसा करने का सुझाव दिया होगा जो आप कर रहे हैं; इसलिए मैं परेशान हूं कि यह क्यों काम नहीं कर रहा है।

Here's a document जो घोड़े के मुंह से आते हुए बहुत आधिकारिक दिखता है। यह विभिन्न ब्राउज़रों की idiosyncrasies का उल्लेख है। आप विभिन्न कार्यान्वयन के लिए अलग-अलग टैग सूप करने की आवश्यकता समाप्त कर सकते हैं।

लेकिन हो सकता है कि एप्लेट/ऑब्जेक्ट टैग्स के बारे में कुछ जादू हो जो उन्हें गतिशील रूप से डालने पर संसाधित होने से रोकती है। कोई और योग्य सलाह नहीं है, मेरे पास आपको पेश करने के लिए एक पागल कामकाज है: आप एक अलग पृष्ठ पर एप्लेट को कैसे पेश करते हैं, और उस पृष्ठ को दिखाने के लिए गतिशील रूप से IFRAME बनाएं जिससे आपके एप्लेट को उस स्थान पर रखा जा सके? IFRAMEs ब्राउज़र में सिंटैक्स में थोड़ा अधिक संगत हैं, और मुझे आश्चर्य होगा कि अगर वे एक ही तरीके से असफल होते हैं।

शायद आपको अपने एप्लेट नोड में स्वैप करने के बाद डोम को देखने के लिए अपने ब्राउज़र के डिबगिंग टूल का उपयोग करना चाहिए। हो सकता है कि यह उस स्थान पर दिखाई नहीं दे रहा है जहां आप सोचते हैं, या उस संरचना के साथ नहीं जो आपको लगता है कि आप बना रहे हैं। आपका कोड मेरे लिए ठीक दिखता है लेकिन मैं गतिशील एप्लेट्स के साथ बहुत अनुभवी नहीं हूं।

+0

हाय, अपने सुझाव के लिए धन्यवाद! IFrame विचार एक अच्छा है, और शायद मैं इसका उपयोग करूंगा यदि मुझे काम करने के लिए गतिशील सम्मिलन नहीं मिल रहा है। मैंने एप्लेट डालने के बाद आईई में डोम को देखा, और यह बहुत अजीब है। एप्लेट डालने पर, मैं एप्लेट को समायोजित करने के लिए कुछ हद तक विस्तारित div को देख सकता हूं, लेकिन कोड कभी भी डोम में दिखाई नहीं देता है, और एप्लेट कभी निष्पादित नहीं होता है। मुझे नहीं पता कि ऐसा क्यों होता है ... – Jonathan

+1

लिंक टूटा हुआ है :( – Antonio

3
document.write() 

आपके पूरे दस्तावेज़ को ओवरराइट करेगा। यदि आप दस्तावेज़ रखना चाहते हैं, और बस एक एप्लेट जोड़ना चाहते हैं, तो आपको इसे जोड़ना होगा।

var app = document.createElement('applet'); 
app.id= 'Java'; 
app.archive= 'Java.jar'; 
app.code= 'Java.class'; 
app.width = '400'; 
app.height = '10'; 
document.getElementsByTagName('body')[0].appendChild(app); 

यह कोड एप्पल को बॉडी टैग के अंतिम तत्व के रूप में जोड़ देगा। सुनिश्चित करें कि यह DOM संसाधित होने के बाद चलाया गया है या आपको कोई त्रुटि मिलेगी। बॉडी ऑनलोड, या jQuery तैयार अनुशंसित।

+0

बहुत स्पष्ट उत्तर +1 के लिए धन्यवाद। धन्यवाद, मैं बस इसे '.class' से "app.code" मान में जाना चाहता हूं अब आवश्यक नहीं है। – Koffy

1

इस उद्देश्य के लिए एक जावास्क्रिप्ट पुस्तकालय है: http://www.java.com/js/deployJava.js

// launch the Java 2D applet on JRE version 1.6.0 
// or higher with one parameter (fontSize) 
<script src= 
    "http://www.java.com/js/deployJava.js"></script> 
<script> 
    var attributes = {code:'java2d.Java2DemoApplet.class', 
     archive:'http://java.sun.com/products/plugin/1.5.0/demos/plugin/jfc/Java2D/Java2Demo.jar', 
     width:710, height:540} ; 
    var parameters = {fontSize:16} ; 
    var version = '1.6' ; 
    deployJava.runApplet(attributes, parameters, version); 
</script> 
+0

यह जावास्क्रिप्ट लाइब्रेरी document.write() का उपयोग करती है, जो पूरे दस्तावेज़ को ओवरराइड करता है। इसे ठीक करने के तरीके को जानने के लिए मेरा उत्तर देखें। – BrunoJCM

+0

यह बाद के संस्करण में तय किया गया हो सकता है। –

0

मैं इसी तरह करने के लिए क्या Beachhouse सुझाव दिया कुछ किया। मैं deployJava.js इस तरह संशोधित:

writeAppletTag: function(attributes, parameters) { 
    ... 

    // don't write directly to document anymore 
    //document.write(startApplet + '\n' + params + '\n' + endApplet); 

    var appletString = startApplet + '\n' + params + '\n' + endApplet; 
    var divApplet = document.createElement('div'); 

    divApplet.id = "divApplet"; 
    divApplet.innerHTML = appletString; 
    divApplet.style = "visibility: hidden; display: none;"; 

    document.body.appendChild(divApplet); 
} 

यह क्रोम, Firefox और IE पर ठीक काम किया। अभी तक कोई समस्या नहीं है।

मैं पहली बार में करने की कोशिश की एक div पहले से ही अपने html फ़ाइल पर बनाया है और केवल innerHTMLappletString करने के लिए सेट है, लेकिन केवल IE नई एप्लेट गतिशील पता लगाने में सक्षम थे। पूरे div सभी ब्राउज़रों पर body कार्यों के लिए निडर डालें।

0

एक नया ऐपलेट तत्व बनाएं और इसे appendChild का उपयोग करके मौजूदा तत्व में संलग्न करें।

var applet = document.createElement('applet'); 
applet.id = 'player'; 

...

var param = document.createElement('param'); 

...

applet.appendChild(param); 
document.getElementById('existingElement').appendChild(applet); 

इसके अलावा, सुनिश्चित मौजूदा तत्व दिखाई देता है, जिसका अर्थ है आप इसे छिपाने के लिए सीएसएस सेट नहीं किया है, अन्यथा ब्राउज़र appendChild उपयोग करने के बाद एप्लेट लोड नहीं होगा बनाते हैं। मैंने इसे समझने की कोशिश में बहुत सारे घंटे बिताए।

0

यह मेरे लिए काम किया:

// my js code 
    var app = document.createElement('applet'); 
    app.code= 'MyApplet2.class'; 
    app.width = '400'; 
    app.height = '10'; 

    var p1 = document.createElement('param'); 
    p1.name = 'sm_UnwindType'; 
    p1.value='200'; 
    var p2 = document.createElement('param'); 
    p2.name = 'sm_Intraday'; 
    p2.value='300'; 

    app.appendChild(p1); 
    app.appendChild(p2); 

    var appDiv = document.getElementById('applet_div'); 
    appDiv.appendChild(app); 

----- एचटीएमएल कोड:

<div id="applet_div"></div> 
संबंधित मुद्दे

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