🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

Q&A

解決済

1回答

5360閲覧

WebView2のNavigationStartingでtarget=”_blank”のリンクを制御したい

neji-thon

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

1グッド

0クリップ

投稿2021/02/04 08:12

編集2021/02/04 08:13

許可サイト以外のアクセスはデフォルトのGoogle Chromeなどで開くようにしたいと思っています。
以下のコードでtarget=”_blank”ではない、webview2内で開くリンクは判定できました。

#####target=”_blank”以外のリンク制御ができたコード

C#

1 private void webview2_NavigationStarting(object sender, CoreWebView2NavigationStartingEventArgs e) 2 { 3 if (!e.Uri.Contains("許可サイトのURL")) 4 { 5 MessageBox.Show("許可サイトではありません。\r\nデフォルトブラウザで開きます。"); 6 Process.Start(e.Uri); // デフォルトブラウザで開く 7 e.Cancel = true; // webview2内でのアクセスをキャンセル 8 return; 9 } 10 }

target=”_blank”のリンクも同様に許可サイト以外はデフォルトブラウザで開く方法はないでしょうか。

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

neji-thon

2021/02/05 03:56

ありがとうございます。 NewWindowRequestedの方はtarget=”_blank”で反応はしてくれましたが、e.Cancelがなく、参考サイトの通りe.NewWindow.Stopで試しましたが、CTRL+Clickと右クリックの新しいウィンドウで開く場合は制御できましたが、普通にクリックするとWebView2の中で開いてしまいました。 参考サイト https://qiita.com/NagaJun/items/4925a63ce7b93b80639e 参考サイトではWindowのサイズを何やらやってるようですが、そこまでは検証できてません。サイズも監視したら制御できるようになりますかね。。 ちょっと時間がなくて、今夜やれたらやってみようと思います。。 取り急ぎ現状報告でしたっ
TN8001

2021/02/05 04:15

これまた試していませんが^^; e.Handled = true; なんじゃないですかね? [CoreWebView2NewWindowRequestedEventArgs.Handled Property (Microsoft.Web.WebView2.Core) | Microsoft Docs](https://docs.microsoft.com/en-us/dotnet/api/microsoft.web.webview2.core.corewebview2newwindowrequestedeventargs.handled?view=webview2-dotnet-1.0.705.50#Microsoft_Web_WebView2_Core_CoreWebView2NewWindowRequestedEventArgs_Handled GitHubで「CoreWebView2_NewWindowRequested」で検索してみたら、そうしている例がありました(WPFですが) [wpf-webview2-only-display/MainWindow.xaml.cs at eea956dd8a8c4ce64e41cfed204dfbdeaa663d42 · noitaro/wpf-webview2-only-display](https://github.com/noitaro/wpf-webview2-only-display/blob/eea956dd8a8c4ce64e41cfed204dfbdeaa663d42/wpf-webview2/MainWindow.xaml.cs#L63
neji-thon

2021/02/05 09:30

すごいできました! なんという事でしょう! ありがとうございます。 GitHubで検索しちゃうという手があるのですね。勉強になります。 気が付けばまたしてもTN8001さんにお世話になってました。(すぐ気が付かずすいません。。) それでは自分で回答してクローズにさせていただきます。m(__)m
guest

回答1

0

ベストアンサー

target="_blank"でも無視して遷移します。
teratailが入っていないURLは、規定ブラウザで開きます。

フッターにある↓が確認にいいでしょう。

html

1<a href="http://blog.teratail.com/" target="_blank">公式ブログ</a> 2<a href="/report" target="_blank">teratail Report</a> 3 4<a href="http://leverages.jp/" target="_blank">運営会社</a> 5<a href="http://leverages.jp/privacypolicy/" target="_blank">個人情報保護方針</a>

cs

1using Microsoft.Web.WebView2.Core; 2using Microsoft.Web.WebView2.WinForms; 3using System; 4using System.Diagnostics; 5using System.Threading.Tasks; 6using System.Windows.Forms; 7 8namespace Questions320460 9{ 10 public partial class Form1 : Form 11 { 12 private WebView2 webView2; 13 14 public Form1() 15 { 16 InitializeComponent(); 17 webView2 = new WebView2 18 { 19 Source = new Uri("https://teratail.com/questions/320460"), 20 Dock = DockStyle.Fill, 21 }; 22 webView2.NavigationStarting += WebView2_NavigationStarting; 23 24 Controls.Add(webView2); 25 26 _ = InitializeAsync(); 27 } 28 29 private async Task InitializeAsync() 30 { 31 await webView2.EnsureCoreWebView2Async(null); // CoreWebView2初期化待ち 32 webView2.CoreWebView2.NewWindowRequested += CoreWebView2_NewWindowRequested; 33 } 34 35 private void WebView2_NavigationStarting(object sender, CoreWebView2NavigationStartingEventArgs e) 36 { 37 if (!e.Uri.Contains("teratail")) 38 { 39 e.Cancel = true; // Navigationのキャンセル 40 Process.Start(e.Uri); 41 return; 42 } 43 } 44 45 private void CoreWebView2_NewWindowRequested(object sender, CoreWebView2NewWindowRequestedEventArgs e) 46 { 47 e.Handled = true; // NewWindowのキャンセル 48 49 if (!e.Uri.Contains("teratail")) 50 { 51 Process.Start(e.Uri); 52 return; 53 } 54 55 webView2.CoreWebView2.Navigate(e.Uri); // 既存WebView2で遷移 56 } 57 } 58}

投稿2021/02/06 06:08

編集2023/07/26 13:54
TN8001

総合スコア9855

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

neji-thon

2021/02/06 11:16

ありがとうございます! できました>< またしても、、お世話になります。 自分が急いで書いてしまった解決策のコメントは運営に削除依頼をしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問