2012-04-30 20 views
58

पर जावास्क्रिप्ट से जावा फ़ंक्शन कॉल करें मैं अपने एंड्रॉइड ऐप में कुछ जावा कोड में सिंक्रोनस कॉल करना चाहता हूं। https://stackoverflow.com/a/3338656एंड्रॉइड वेबव्यू

मेरे जावा कोड:

final class MyWebChromeClient extends WebChromeClient { 
     public boolean onJsAlert(WebView view, String url, String message, JsResult result) { 
      Log.d("LogTag", message); 
      result.confirm(); 
      return true; 
     } 
    } 

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

<html> 
<script> 
function java_request(){ 
    alert('test'); 
} 
</script> 
<body> 
<h2>Welcome</h2> 
<div id="area"></div> 
<form> 
<input type="button" value="java_call" onclick="java_request()"> 
</form> 
</body> 
</html> 

जब मैं java_call बटन पर टैप, बटन को जाता है

मैं इस समाधान का उपयोग कर रहा दबाया राज्य मैं कंसोल लॉग में 'test' देख सकता हूं। यहां तक ​​कि सबकुछ सामान्य है।

समस्या यह है कि बटन कभी भी अपने सामान्य स्थिति में वापस नहीं आ जाता है। यह दबाए गए राज्य में रहता है। शायद जावास्क्रिप्ट निष्पादन टूट गया है या कुछ?

बटन कभी भी सामान्य स्थिति में क्यों नहीं लौटाता है?

उत्तर

81

मुझे नहीं लगता कि जावा कोड को निष्पादित करने के लिए जावास्क्रिप्ट प्राप्त करने का यह सबसे अच्छा समाधान है। यहाँ देखें:

आप जावास्क्रिप्ट के माध्यम से प्रतिदेय होने के लिए HTML को मूल कोड को बेनकाब करना चाहते हैं, अपने वेब दृश्य घोषणा चारों ओर निम्न कार्य करें:

public class JavaScriptInterface { 
    private Activity activity; 

    public JavaScriptInterface(Activity activiy) { 
     this.activity = activiy; 
    } 

    public void startVideo(String videoAddress){ 
     Intent intent = new Intent(Intent.ACTION_VIEW); 
     intent.setDataAndType(Uri.parse(videoAddress), "video/3gpp"); 
     activity.startActivity(intent); 
    } 
} 
:

JavaScriptInterface jsInterface = new JavaScriptInterface(this); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.addJavascriptInterface(jsInterface, "JSInterface"); 

वर्ग JavaScriptInterface घोषित

मैं एक वीडियो चलाने के लिए एक समारोह की घोषणा कर रहा हूं, लेकिन आप जो भी चाहें कर सकते हैं।

अंत में आप सरल जावास्क्रिप्ट कॉल के माध्यम से WebView सामग्री में इस फोन:

<video width="320" height="240" controls="controls" poster='poster.gif' 
     onclick="window.JSInterface.startVideo('file:///sdcard/test.3gp');" > 
    Your browser does not support the video tag. 
</video> 

उदाहरण के लिए, मेरा एक और उत्तर से लिया जाता है वीडियो खेलने के बारे में है, लेकिन पर्याप्त समझा जाना चाहिए।

संपादित प्रति @ CedricSoubrie की टिप्पणी के रूप में: यदि आवेदन का लक्ष्य संस्करण 17 या उच्च पर सेट किया जाता है आप प्रत्येक विधि आप वेब दृश्य को निर्यात करना चाहते हैं ऊपर एनोटेशन @JavascriptInterface जोड़ने की जरूरत है।

+1

जानकारी के लिए धन्यवाद, मैंने यह समाधान देखा। चूंकि इस समाधान के लिए 2.3.एक्स में एक बग है, इसलिए मैं इसका उपयोग नहीं करना चाहता हूं। कामकाज बहुत ही भयानक था। – ozkolonur

+0

@ozkolonur मैं एंड्रॉइड 2.2+ के सभी संस्करणों के साथ इसका उपयोग कर रहा हूं, कभी भी कोई बग नहीं देखा। क्या आप इसे साझा कर सकते हैं। एक लिंक भी बहुत स्वागत है। –

+0

http://code.google.com/p/android/issues/detail?id=12987 – ozkolonur

1

आपका फ़ंक्शन 'सत्य' देता है। इससे आपके एचटीएमएल कोड की 'ऑनक्लिक' संपत्ति सत्य के बराबर होती है, इसलिए बटन 'क्लिक किया जाता है।'

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