2015-10-09 6 views
5

के बीच एक्समरिन एंड्रॉइड दो तरह का संचार मैं एक्समरिन एंड्रॉइड का उपयोग करके एक ऐप विकसित कर रहा हूं जिसमें वेबव्यू एक वेब पेज प्रदर्शित कर रहा है। मैं WebView से C# तक जावास्क्रिप्ट के बीच दो तरह के संचार को कार्यान्वित करना चाहता हूं। मैं इस link का उपयोग कर जावास्क्रिप्ट से सी # को कॉल कर सकता हूं। हालांकि मुझे डेटा को सी # से जावास्क्रिप्ट में वापस भेजने का कोई तरीका नहीं मिला। इस दृष्टिकोण में डेटा को आगे और आगे भेजने का कोई तरीका है। मैंने सोचा था कि जावास्क्रिप्ट में कॉलबैक लिखना काम करेगा लेकिन इसे सी # कोड से कैसे फायर करना है।जावास्क्रिप्ट और सी #

अब, मेरी समस्या यह है कि वेबव्यू को जावास्क्रिप्ट इंटरफ़ेस क्लास से कैसे कॉल करें। मेरे पास एक जावास्क्रिप्ट इंटरफेस क्लास है जैसा कि https://developer.xamarin.com/recipes/android/controls/webview/call_csharp_from_javascript/ नेमस्पेस स्कैनर एंड्रॉइड { पब्लिक क्लास जेएसआईटरफेस: जावा.लांग.ऑब्जेक्ट { संदर्भ संदर्भ; वेबव्यू वेब व्यू;

public JSInterface (Context context, WebView webView1) 
    { 
     this.context = context; 
     this.webView = webView1; 
    } 

    [Export] 
    [JavascriptInterface] 
    public void ShowToast() 
    { 
     Toast.MakeText (context, "Hello from C#", ToastLength.Short).Show(); 
     this.webView.LoadUrl ("javascript:callback('Hello from Android Native');"); 

    } 
    } 
} 

कोड लोडयूआरएल लाइन पर एक अपवाद फेंकता है। java.lang.Throwable: धागे 'थ्रेड -8 9 1' पर एक वेब व्यू विधि बुलाया गया था। सभी वेब दृश्य विधियों को एक ही धागे पर बुलाया जाना चाहिए। (अपेक्षित लूपर लूपर (मुख्य, टिड 1) {42ce58a0} शून्य पर बुलाया गया है, एफवाईआई मुख्य लूपर लूपर (मुख्य, टिड 1) {42ce58a0})

अब मैं इस जावा स्क्रिप्ट इंटरफ़ेस से वेबव्यू को संदर्भित करने का संघर्ष कर रहा हूं कक्षा

+0

[वेबव्यू में एंड्रॉइड कॉलिंग जावास्क्रिप्ट फ़ंक्शंस का संभावित डुप्लिकेट] (http://stackoverflow.com/questions/4325639/android-calling-javascript-functions-in-webview) – Cheesebaron

उत्तर

2

हां। यह सम्भव है। आप किटकैट को निशाना बनाने या उच्च रहे हैं, तो आप उपयोग कर सकते हैं:

webView.EvaluateJavascript("enable();", null); 

इस मामले enable(); में जहां एक जे एस कार्य है।

आप निम्नतर API स्तरों लक्षित कर रहे हैं आप उपयोग कर सकते LoadUrl();:

webView.LoadUrl("javascript:enable();"); 

संपादित करें:

त्रुटि आप प्राप्त जहां यह LoadUrl पर शिकायत है, क्योंकि यह किसी कारण के लिए एक गैर पर होता है -यूआई धागा।

आप पहले से ही अपने JavascriptInterface वर्ग में Context पर पारित किया है के बाद से, तो आप बस ShowToast की सामग्री में लपेट कर सकते हैं:

context.RunOnUiThread(() => { 
    // stuff here 
}); 

बस Activity करने के लिए Context से हस्ताक्षर बदल सकते हैं और यह आप आप वापस मार्शल की मदद करनी चाहिए यूआई थ्रेड पर।

+0

मेरी समस्या है कि वेबव्यू को जावास्क्रिप्ट से कॉल करना है इंटरफेस वर्ग। मेरे पास जावास्क्रिप्ट इंटरफ़ेस क्लास है जैसा कि बताया गया है https://developer.xamarin.com/recipes/android/controls/webview/call_csharp_from_javascript/ – User382

+0

मुझे समझ में नहीं आता कि "जावास्क्रिप्ट इंटरफ़ेस क्लास से वेबव्यू को कैसे कॉल करें" है। आपका क्या अर्थ है? – Cheesebaron

+0

पनीरबार कृपया नीचे विवरण देखें। – User382

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