2016-08-31 7 views
1

私はwebviewを持っていて、target=_blankの場合はブラウザで開きませんが、webviewでは開いたままにしておきたいと思います。 私は以下のコードを試みた:WebViewで他のブラウザのリンクを開くことを防止する

private async void webView_LoadCompleted(object sender, NavigationEventArgs e) 
{ 
    await webView.InvokeScriptAsync("eval", new[] 
    { 
     @"(function() 
     { 
      var hyperlinks = document.getElementsByTagName('a'); 
      for(var i = 0; i < hyperlinks.length; i++) 
      { 
       if(hyperlinks[i].getAttribute('target') != null) 
       { 
        hyperlinks[i].setAttribute('target', '_self'); 
       } 
      } 
     })()" 
    }); 
} 

をしかし、WebViewの中に開いたままにし、ブラウザで開き、ウェブサイトがあることができますいくつかのウェブサイトがあります。これを修正して、すべてのリンクをWebviewで開いたままにするにはどうすればよいですか?

+0

「WebView」で使用したhtmlソースを共有できますか?私のテストのように、あなたのコードはうまくいきます。 –

+0

これは、上記の問題のプロジェクトの例です。https://1drv.ms/u/s!Auqiv8Ukng7U7T4TbqCaT741d1Ay既にフライトスケジュールを見て、選択ボタンを押してフライトを選択すると、Webブラウザに直接移動します。 (例えば、私は赤い円を描いています)。私はwebviewにいたい。どのようにそれを処理するには? – Rose

答えて

0

画像の「選択」ボタンが要素ではない<button>要素であるため、コードが機能しませんでした。ユーザーがこのボタンをクリックすると、JavaScript関数を呼び出して新しいウィンドウで開きます。したがって、このシナリオではあなたのコードは動作しません。

新しいウィンドウリクエストを処理するには、WebView.NewWindowRequested eventを使用することをおすすめします。このイベントは、ユーザーがWebViewでコンテンツを新しいウィンドウで開くアクションを実行したときに発生します。新しいウィンドウリクエストのカスタム処理を提供し、Handledプロパティをtrueに設定すると、デフォルトのブラウザが起動されないようにすることができます。簡単なサンプルを次に示します。詳細情報については

private void webView_NewWindowRequested(WebView sender, WebViewNewWindowRequestedEventArgs args) 
{ 
    webView.Navigate(args.Uri); 

    args.Handled = true; 
} 

備考WebView.NewWindowRequested eventを参照してください。

+0

上記のコードを使用すると、Webブラウザでリンクが開かれません。しかし、リンクを開くことはできません。私はそれらのリンクを開いたままにしておきたいと思いますが、ウェブブラウザでは開いていません。 – Rose

+0

@Rose「リンクを開くことができません」とはどういう意味ですか?あなたのサンプルプロジェクトでこのコードをテストしたところ、うまくいきました。 –

+0

です。私のミスには申し訳ありません – Rose

関連する問題