2009-02-20 2 views
12

मेरे पास एक जावा एप्लेट चल रहा है जो ब्राउज़र में कुछ जावास्क्रिप्ट कार्यों को कॉल कर रहा है और परिणाम कार्यों से परिणाम की उम्मीद कर रहा है। यह निम्न कॉन्फ़िगरेशन के साथ काम कर रहा है:क्या जावा एप्लेट मैक ओएस पर फ़ायरफ़ॉक्स के भीतर जावास्क्रिप्ट के साथ संवाद करने में असमर्थ हैं?

  • इंटरनेट एक्सप्लोरर
  • Firefox/Windows
  • सफारी/मैक

लेकिन यह मैक ओएस

के स्रोत पर Firefox के साथ काम नहीं कर रहा समस्या Win.eval कॉल लगता है जो हमेशा शून्य वापस आती है। मैं एक मैक ओएस एक्स 10.4.11

एक छोटा सा कोड पर Firefox 3.0.6 के साथ इस परीक्षण किया:

JSObject win = (JSObject) JSObject.getWindow(this); 
Object exp = win.eval("testfunc()"); 
System.out.println("exp = " + exp.toString()); 

यह एक java.lang.NullPointerException (exp.toString()) बयान से चलाता है) । testfunc जावास्क्रिप्ट फ़ंक्शन बस सत्य देता है।

मैंने win.call के साथ प्रयास किया और एक ही परिणाम मिला।

मेरे एप्लेट टैग में मेस्क्रिप्ट और स्क्रिप्ट योग्य विशेषताएं शामिल हैं।


मुझे ट्रिस्टन का उत्तर धन्यवाद मिला। अपने समाधान का परीक्षण मैंने एक बहुत ही सरल परीक्षण बनाया जो अपराधी को खोजने के लिए काम कर सकता था और काम कर सकता था। मुझे यकीन था कि मैंने एक खाली testfunc() के साथ अपने परीक्षण किए हैं जो अभी सच साबित हुए हैं, लेकिन शायद मैंने ऐसा इसलिए नहीं किया क्योंकि उस मामले में यह काम करता है। वास्तविक समस्या यह थी कि फ़ंक्शन को एप्लेट की सार्वजनिक विधि कहा जाता था। फ़ायरफ़ॉक्स मैक में उस मामले को संभालने में सक्षम नहीं लगता है।

जावा वर्ग:

public class MyApplet extends Applet { 
    public int getMyValue() { 
     return 5; 
    } 

    public void somefunction() { 
     JSObject win = (JSObject) JSObject.getWindow(this); 
     Object exp = win.eval("jsfunc()"); 
     System.out.println("exp = " + exp.toString()); 
    } 
} 

और जावास्क्रिप्ट कोड:

मैं आपको एक उदाहरण देता हूँ क्योंकि jsfunc getMyValue कॉल

function jsfunc() { 
    var myApplet = document.getElementById("applet_id"); 
    return myApplet.getMyValue() + 5; 
} 

exp somefunction में अशक्त हो जाएगा() एप्लेट की विधि। यदि आप एप्लेट के गुणों को सभी कॉल हटाते हैं तो आप शांत होते हैं।
मेरी समस्या को हल करने के लिए मैंने एप्पल के सभी मूल्यों को देने का फैसला किया जिसे मैंने अपने जावास्क्रिप्ट फ़ंक्शन के पैरामीटर के रूप में नियुक्त किया और अब मैं अच्छा हूं।
यदि जावास्क्रिप्ट एप्लेट की स्थिति बदलता है तो यह हमेशा मामला नहीं हो सकता है ... मैं भाग्यशाली था :)

उत्तर

3

क्या यह स्क्रीन पर वैश्विक वस्तुओं में से किसी एक को एक्सेस करने के माध्यम से काम करेगा? Ergo,

जावास्क्रिप्ट में:

window.testfunc = function() { //... } 

एप्लेट में:

win.eval("window.testfunc()") // or maybe just win.eval("testfunc()") 

मेरे प्रयोग किया जाएगा कि। लेकिन मैं मैक ओएस एक्स पर एफएफ पर "window.close()" को कॉल कर रहा हूं, और यह अभी भी काम करता है।

+0

फ़ंक्शन को कॉल करना समस्या नहीं है, परिणाम वापस प्राप्त करना है। डीबग स्टेटमेंट के साथ मैं स्पष्ट रूप से देख सकता हूं कि फ़ंक्शन निष्पादित किया गया है, लेकिन किसी भी तरह रिटर्न वैल्यू गुम हो जाता है और मुझे केवल "शून्य" मिलता है। –

4

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

अन्य तरीके से संचार के लिए जे एस एप्लेट के लिए आप भी उदाहरण के लिए स्क्रिप्ट विशेषता या पैरामीटर, उपयोग करना चाहिए:

<applet code="..." mayscript="true" /> 

यह स्क्रिप्ट कार्यों का उपयोग करने के लिए अपने एप्लेट अनुमति देता है।

<applet code="..." scriptable="true" /> 
+0

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

0

आप एप्लेट आप शानदार के गुणों के लिए सभी कॉल को निकाल देते हैं।

यह अन्य स्थितियों में भी हो सकता है। मुझे एक ही समस्या गुगल करने के बाद यह पृष्ठ मिला, इसलिए मैंने सोचा कि मैं एक डाटापॉइंट जोड़ूंगा। केवल अंतर यह है कि मैं win.eval() के बजाय win.call() का उपयोग कर रहा था।

मुझे यह सुनिश्चित करने के लिए जावास्क्रिप्ट में एक चेतावनी() कॉल था कि कॉल हो रहा था, और देखा कि फ़ायरफ़ॉक्स 3.0.9, ओएस एक्स 10.5.6, जावा 1.5.0_16 पर बिल्कुल वही लॉकअप दिखाई देता है। फ़ायरफ़ॉक्स के साथ 100% दोहराने योग्य, सफारी पर कोई समस्या नहीं है (मेरे पास इस बॉक्स पर विंडोज स्थापित नहीं है)।

जब मैंने अलर्ट() से छुटकारा पा लिया और बस एक मूल्य वापस कर दिया, तो समस्या दूर हो गई।

Sooooo ... शायद थोड़ी देर के बाद जावास्क्रिप्ट समय में कॉल हो और बस शून्य को टॉस करें?

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