2016-05-11 1 views
1

win 10 UWPアプリケーションを作成しています。webview内でマウスイベントを取得する必要があります。Win 10 UWP

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

私はそこにwebviewを追加しました。マウスの右クリックとドラッグイベントをwebview要素にドラッグする必要があります。しかし今、それはブラウザのためのイベントを取っている。

+0

WebViewでは、KeyDown、KeyUp、PointerPressedなど、UIElementから継承されたほとんどのユーザー入力イベントはサポートされていません。一般的な回避策は、[InvokeScriptAsync](https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.webview.invokescriptasync.aspx)をJavaScript ** eval ** HTMLイベントハンドラを使用し、HTMLイベントハンドラから** window.external.notify **を使用して[WebView.ScriptNotify]を使用してアプリケーションに通知する機能(https://msdn.microsoft.com/en-私たち/ライブラリ/ windows/apps/windows.ui.xaml.controls.webview.scriptnotify.aspx)。 –

+0

私は後でいくつかの情報を追加しようとすることができますが、ここで良い例です:[ユニバーサルWindowsアプリケーションでWebViewのJavaScriptアラートを傍受する方法](https://code.msdn.microsoft.com/How-to-intercept-854d33da ) –

答えて

0

要素をXAMLからWebViewにドラッグする方法のサンプル。それは完全な解決策ではありませんが、あなたに役立つかもしれません。

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#コード:

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; 
    } 

必要なのは、JavaScriptコードの段落要素の上にマウスを置くだけです。

あなたが追加することができますJavaScriptコード内のイベントをチェックしたい場合はNavigationCompleted = "WebViewElm_NavigationCompleted" とあなたのWebViewとC#のイベントに属性ScriptNotify = "WebViewWithJSInjection_ScriptNotify"

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 
    } 

JavaScriptが機能を追加して:

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

    function callExternal() 
    { 
     window.external.notify(document.getElementById("txtClick").innerHTML); 
    } 
関連する問題