2016-05-11 7 views
1

Ich erstelle eine Win 10 UWP-Anwendung.Notwendigkeit, Mausereignisse in webview zu erhalten Win 10 UWP

<Grid> 
<WebView x:Name="WebViewElm"/> 
</Grid> 

Ich habe eine Webansicht darin aufgenommen, und ich brauche die rechte Maustaste und Drag & Drop Ereignisse für das Webansicht Element zu erhalten. Aber jetzt nimmt es die Ereignisse für den Browser. Wie kann ich mit den Eingabeereignissen in der Webansicht umgehen?

+0

WebView unterstützt die meisten Benutzereingabeereignisse, die von UIElement übernommen wurden, z. B. KeyDown, KeyUp und PointerPressed, nicht. Eine häufige Problemumgehung besteht darin, [InvokeScriptAsync] (https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.webview.invokeskriptasync.aspx) mit der JavaScript ** -Evaluierung zu verwenden ** Funktion zur Verwendung der HTML-Event-Handler und Verwendung von ** window.external.notify ** vom HTML-Event-Handler zur Benachrichtigung der Anwendung mit [WebView.scriptNotify] (https://msdn.microsoft.com/de-de us/library/windows/apps/windows.ui.xaml.controls.webview.scriptnotify.aspx). –

+0

Ich kann später versuchen, weitere Informationen hinzuzufügen, aber hier ist ein schönes Beispiel: [Wie man JavaScript-Warnungen in WebView in universellen Windows-Apps abfängt] (https://code.msdn.microsoft.com/How-to-intercept-854d33da) –

Antwort

0

Beispiel zum Ziehen eines Elements von XAML nach WebView. Es ist keine vollständige Lösung, aber möglicherweise hilfreich für Sie.

XAML:

<StackPanel Orientation="Vertical" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <WebView DefaultBackgroundColor="LightGray" Source="ms-appx-web:///HTMLPage1.html" PointerReleased="WebViewElm_PointerReleased" Width="300" Height="300" x:Name="WebViewElm"></WebView> 
    <TextBlock x:Name="txtZiel" DragOver="txtZiel_DragOver" PointerReleased="txtZiel_PointerReleased" >2</TextBlock>  
    </StackPanel> 

C# -Code:

private async void WebViewElm_PointerReleased(object sender, PointerRoutedEventArgs e) 
    { 
     await WebViewElm.InvokeScriptAsync("callFromExternal", new string[] { txtZiel.Text }); 
    } 

    private async void WebViewElm_NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args) 
    { 
     await WebViewElm.InvokeScriptAsync("LoadingFinished", null); 
    } 

HTML:

<body> 
<p id="txtClick">1</p> 
</body> 

JavaScript:

function callFromExternal(somedrag) {  
     document.getElementById("txtClick").innerHTML = somedrag; 
    } 

Das einzige, was Sie brauchen, ist zu überprüfen ist Maus über Absatz-Element in Ihrem JavaScript-Code.

Wenn Sie Ereignisse innerhalb JavaScript-Code überprüfen, die Sie hinzufügen können NavigationCompleted = "WebViewElm_NavigationCompleted" und ScriptNotify = "WebViewWithJSInjection_ScriptNotify" auf Ihre WebView und C# Ereignisse Attribute

private async void WebViewElm_NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args) 
    { 
     await WebViewElm.InvokeScriptAsync("LoadingFinished", null); 
    } 

    private void WebViewWithJSInjection_ScriptNotify(object sender, NotifyEventArgs e) 
    { 
     // here in e.Value you can get string with document.getElementById("txtClick").innerHTML 
    } 

In JavaScript-Funktionen hinzufügen:

function LoadingFinished() 
    { 
     document.getElementById('txtClick').addEventListener("mousedown", callExternal); 
    } 

    function callExternal() 
    { 
     window.external.notify(document.getElementById("txtClick").innerHTML); 
    }