2011-10-05 14 views
5

वेबव्यू ऑब्जेक्ट के जावास्क्रिप्ट इंटरफ़ेस से मुख्य गतिविधि के तरीकों को कॉल करना संभव है? या इस इंटरफ़ेस से साझा किए गए संदर्भों तक पहुंचने के लिए, इसलिए मैं अपनी गतिविधि के साथ डेटा पढ़ सकता था? मैं अपनी गतिविधि को यह जानना चाहता हूं कि एक विशिष्ट जावास्क्रिप्ट कार्रवाई हुई।एंड्रॉइड वेबव्यू: कॉल गतिविधि विधियां जावास्क्रिप्ट इंटरफ़ेस

+0

संभावित ब्राउज़र का एक डुप्लिकेट [ब्राउज़र में जावास्क्रिप्ट इंटरफ़ेस जोड़ना] (http://stackoverflow.com/questions/3765860/adding-javasc रिप्ट-इंटरफेस-टू-ए-ब्राउजर) – skolima

उत्तर

3

हां, जावास्क्रिप्ट और आपके आवेदन के बीच दो तरह का संचार WebView.addJavascriptInterface() के माध्यम से संभव है। इस उदाहरण की जाँच करें:

http://android-developers.blogspot.com/2008/09/using-webviews.html

+0

ठीक है, इस तरह की समस्या मेरी समस्या हल करती है। आपके द्वारा दिए गए उदाहरण में यह काम करता है, क्योंकि डेमो जावास्क्रिप्ट इंटरफेस वेबव्यूडेमो कक्षा का उप-वर्ग है और इसकी विधियों तक पहुंच सकता है। लेकिन जब यह सबक्लास नहीं है तो इसे हासिल करने का कोई तरीका है? – Krzychu

+0

यह किसी भी 'WebViewDemo' विधियों का उपयोग नहीं करता है। यह केवल 'mHandler' का उपयोग करता है और इसे कन्स्ट्रक्टर को पास किया जा सकता है। – Caner

+0

मैंने 'mandler' को पारित करने का प्रयास किया लेकिन मुख्य गतिविधि अभी भी पहुंच योग्य नहीं है। जब मैं 'mHandler.post (नया रननेबल() { सार्वजनिक शून्य रन() { mWebView.loadUrl (" जावास्क्रिप्ट: तरंग() "); } }); 'मुझे _myWebView को हल नहीं किया जा सकता है_ – Krzychu

1

आप इस लक्ष्य को हासिल करने के लिए WebView.addJavascriptInterface फ़ंक्शन का उपयोग कर सकते हैं। और जानकारी: In Google documentation

+0

हां, मैं addJavascriptInterface (नया जावास्क्रिप्ट इंटरफेस (यह), "एंड्रॉइड") का उपयोग कर रहा हूं; सवाल यह था कि जावास्क्रिप्ट इंटरफेस कक्षा के भीतर से मुख्य गतिविधि की विधि को कैसे कॉल करें। – Krzychu

+0

क्या आप इस समय अपने प्रश्न के साथ अपना प्रश्न अपडेट कर सकते हैं? – SERPRO

2

आपकी गतिविधि:

/* 
* entry point of the application starting the index.html of PhoneGap 
* */ 

package com.test.my.myApp; 

import org.apache.cordova.DroidGap; 

import android.os.Bundle; 
import android.util.Log; 

import com.google.analytics.tracking.android.EasyTracker; 

public class MyOpelMainActivitiy extends DroidGap 
{ 

    String curPhoneNumber; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     super.setIntegerProperty("splashscreen", R.drawable.splash); 
     super.loadUrl("file:///android_asset/www/app/index.html",15000); 

    } 
    @Override 
    public void onStart() { 
     super.onStart(); 
     this.appView.addJavascriptInterface(new JsInterface(), "android"); 
     curPhoneNumber = "test"; 

     // The rest of your onStart() code. 
     EasyTracker.getInstance().activityStart(this); // Add this method. 
    } 

    @Override 
    public void onDestroy() 
    { 
     super.onDestroy();  
     com.google.analytics.tracking.android.EasyTracker.getInstance().activityStop(this); 
    } 

    public class JsInterface{ 





      public String getPhoneNumber() 
      { 

       // Here call any of the public activity methods.... 
       return curPhoneNumber; 
      } 
     } 
    } 

HTML मार्कअप:

<script type="text/javascript"> 
      alert(android.getPhoneNumber()); 
     </script> 

=================== ================================================== ===

+0

api17 + के लिए इस उदाहरण में getPhoneNumber को एनोटेशन @ android.webkit.JavascriptInterface होना चाहिए – MazarD

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