2012-12-08 13 views
21

साथ काम नहीं कर रहा मैं एंड्रॉयड ओएस Jelly Bean 4.2 की एक गंभीर बग का सामना करना पड़ रहा है, यहाँ मेरा कार्यक्रम में मैं जावास्क्रिप्ट का उपयोग कर रहा वेबपेज की ऊंचाई पाने के लिए और यह पूरी तरह से 4.1 करने के लिए एंड्रॉयड 2.2 से काम कर रहा है लेकिन जब मैं एंड्रॉइड 4.2 में एक ही कोड का उपयोग करने की कोशिश की ताकि जावास्क्रिप्ट इंटरफेस काम नहीं कर रहा है।जावास्क्रिप्ट इंटरफ़ेस android 4.2

मैं इस समस्या को कैसे ठीक कर सकता हूं?

+1

आप यह सुनिश्चित करें कि जावास्क्रिप्ट इंटरफ़ेस ही काम नहीं कर रहा है, और नहीं javascript आदेश कर रहे हैं (जे एस पार्स त्रुटि) ? –

+0

असल में मैं जावास्क्रिप्ट समारोह बोल रहा हूँ और कहा कि 17 से पिछले संस्करण में बुलाया जा रहा है, लेकिन android 4.2 एपीआई स्तर 17 – Ravi

+0

पर काम नहीं कर क्या जावास्क्रिप्ट समारोह जो आप उपयोग कर बुला रहे हैं "loadUrl()" ऊंचाई लाने के लिए? –

उत्तर

46

Android 4.2 प्रलेखन से:

सावधानी: यदि आप 17 या इससे अधिक के लिए अपने targetSdkVersion निर्धारित किया है, तो आप किसी भी विधि है कि आप उपलब्ध अपने वेब पेज कोड चाहते हैं @JavascriptInterface टिप्पणी जोड़ने चाहिए (विधि भी सार्वजनिक होनी चाहिए)। यदि आप एनोटेशन प्रदान नहीं करते हैं, तो एंड्रॉइड 4.2 या उसके बाद वाले संस्करण पर चलने पर विधि आपके वेब पेज द्वारा पहुंच योग्य नहीं होगी।

स्रोत: Android WebView Doc

+1

से प्रत्येक एंड्रॉइड ओएस संस्करण पर पूरी तरह से काम कर रहा है। इस जानकारी के लिए बहुत कुछ धन्यवाद: डी हम फंस गए थे क्योंकि हमने अपना उन्नयन किया था एप्लिकेशन का एपीआई संस्करण। – Ethenyl

+4

पवित्र बकवास! मैं विश्वास नहीं कर सकता कि यह पोस्ट मुझे कितनी देर तक ढूंढना है। मुझे यह जानने के लिए एक त्रुटि या कुछ फेंक देना चाहिए कि क्या हो रहा है! – Richard

+0

माना जाता है इस Android के पुराने संस्करणों में कुछ सुरक्षा दोष ठीक करती है, के रूप में यहाँ का वर्णन - लेकिन उदाहरण कोड दुर्घटनाओं, मेरे परीक्षण में: http://stackoverflow.com/questions/6415882 – NoBugs

8

दस्तावेज़ के अनुसार: Android doc एंड्रॉइड 4.2 के बाद से आपको @JavascriptInterface (और आपकी विधि को सार्वजनिक होना चाहिए) के साथ अपनी विधि को एनोटेट करना होगा।

18

और, यदि आप ProGuard का उपयोग करके कर रहे हैं, तो यह अभी भी ठीक नहीं है इस

-keepclassmembers class * { 
    @android.webkit.JavascriptInterface <methods>; 
} 

-keepattributes JavascriptInterface 
-keep public class com.mypackage.MyClass$MyJavaScriptInterface 
-keep public class * implements com.mypackage.MyClass$MyJavaScriptInterface 
-keepclassmembers class com.mypackage.MyClass$MyJavaScriptInterface { 
    <methods>; 
} 

जोड़ने के लिए याद है, जोड़ने के इस

-keepattributes *Annotation* 

नोट: यदि आपका MyJavaScriptInterface सार्वजनिक वर्ग होना चाहिए

,210

रेफरी #: Android Proguard Javascript Interface Fail

+0

अंत में, यह समाधान है। Proguard.cfg पर पहला भाग भी जोड़ना यह काम नहीं कर रहा था (गैलेक्सी नोट 3 के लिए एंड्रॉइड 4.3), लेकिन कुंजी "-keepattributes * एनोटेशन *" भाग लगती थी। जैसे ही मैंने सीएफजी को जोड़ा, यह तुरंत काम करना शुरू कर दिया। धन्यवाद एक बहुत :) – Sobakus

+0

हे भगवान धन्यवाद। आपने मुझे मेरे कोड में हेरफेर करने के 11 घंटे से बचाया – hadi

5

Proguard config कि लक्ष्य एपीआई 17+ साथ मेरे लिए काम करता है:

-keep @interface android.webkit.JavascriptInterface 
-keepclassmembers class * { 
    @android.webkit.JavascriptInterface <methods>; 
} 
संबंधित मुद्दे