2015-05-22 14 views
5

पर क्लिक किया घटना संभाल मैं एक WebView नियंत्रणxamarin.forms WebView

मैं GestureRecognizers की कोशिश की है, लेकिन कुछ नहीं होता पर क्लिक/नल घटना हैंडल करना चाहते हैं, मैं शायद लगता है WebView घटना बनाने के कुछ प्रकार है "सच" संभाला।

<WebView> 
    <WebView.GestureRecognizers> 
     <TapGestureRecognizer 
       Tapped="OnWebViewClick" 
       NumberOfTapsRequired="1" /> 
    </WebView.GestureRecognizers> 
</WebView> 

और मैं पीछे भी ग # कोड का उपयोग कर यह कोशिश की है, लेकिन कोई किस्मत:/

उत्तर

1

आप XLabs से HybridWebView उपयोग कर सकते हैं, और उपयोग जावास्क्रिप्ट इंजेक्शन अपने Xamarin नियंत्रण में आह्वान और क्लिक्स को संभालने के लिए। इंजेक्शन जावास्क्रिप्ट कोड capture चरण पर एक क्लिक-ईवेंट श्रोता जोड़ सकता है। जब एक क्लिक का पता चला है तो यह सी # कोड पर जानकारी भेजने के लिए Native कॉलबैक का उपयोग करता है। -

उदाहरण के लिए आप इस तरह एक कस्टम नियंत्रण को परिभाषित कर सकते हैं:

public class ClickEventArgs : EventArgs 
{ 
    public string Element { get; set; } 
} 

public class ClickableWebView : XLabs.Forms.Controls.HybridWebView 
{ 
    public event EventHandler<ClickEventArgs> Clicked; 

    public static readonly BindableProperty ClickCommandProperty = 
     BindableProperty.Create("ClickCommand", typeof(ICommand), typeof(ClickableWebView), null); 

    public ICommand ClickCommand 
    { 
     get { return (ICommand)GetValue(ClickCommandProperty); } 
     set { SetValue(ClickCommandProperty, value); } 
    } 

    public ClickableWebView() 
    { 
     LoadFinished += (sender, e) => 
      InjectJavaScript(@" 
      document.body.addEventListener('click', function(e) { 
       e = e || window.event; 
       var target = e.target || e.srcElement; 
       Native('invokeClick', 'tag='+target.tagName+' id='+target.id+' name='+target.name); 
      }, true /* to ensure we capture it first*/); 
     "); 

     this.RegisterCallback("invokeClick", (string el) => { 
      var args = new ClickEventArgs { Element = el }; 

      Clicked?.Invoke(this, args); 
      ClickCommand?.Execute(args); 
     }); 
    } 
} 

नमूना XAML उपयोग

<local:ClickableWebView 
    Uri="https://google.com" 
    Clicked="Handle_Clicked" 
/> 

और नमूना कोड-पीछे

void Handle_Clicked(object sender, CustomWebView.ClickEventArgs e) 
{ 
    Xamarin.Forms.Application.Current.MainPage.DisplayAlert("WebView Clicked", e.Element, "Dismiss"); 
} 

** आउटपुट **

sample output

वैकल्पिक रूप से, आप भी इस का उपयोग कर MVVM पैटर्न को लागू करने के ClickCommand संपत्ति बाध्य कर सकते हैं।

1

इशारा पहचानकर्ता WebView साथ काम नहीं करता। आप MR.Gestures

का उपयोग करने का प्रयास कर सकते हैं सभी सुविधाओं को प्राप्त करने के लिए आपको लाइसेंस खरीदना होगा।

आप लाइसेंस कुंजी ठीक से कॉन्फ़िगर करने के लिए भूल जाते हैं या कुंजी अपने अनुप्रयोग नाम से मेल नहीं खाता है, तो सभी घटनाओं अभी भी बढ़ा दी जाएगी, लेकिन EventArgs के गुणों खाली हो जाएगा। यह टैप और लंबी प्रेस घटनाओं के लिए पर्याप्त हो सकता है, लेकिन अधिक जटिल लोगों के लिए नहीं।

+1

धन्यवाद ... मैंने इसे चेक किया है और यह बहुत मदद करता है। लेकिन मैं जानना चाहता हूं कि इसे कैसे करना है मैं इस तरह कुछ सोच रहा था (http://arteksoftware.com/gesture-recognizers-with-xamarin-forms/) लेकिन मुझे कोई भाग्य नहीं था –