質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

Q&A

解決済

1回答

2633閲覧

WebView2を使ったブラウザでパスワードの保存が

b99107

総合スコア47

C#

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

0グッド

0クリップ

投稿2022/08/25 09:10

現在、C#でWebView2を使ったブラウザを作成しています。
URLを指定して、WEBページを表示することが出来るようになった程度です。

実現したいこと

アカウント認証のあるサイトで、「パスワードの保存」を行いたいと考えています。
ログイン時にパスワードを保存しましますか?と聞いてくる機能です

CoreWebView2Settings.IsPasswordAutosaveEnabled というプロパティで実現できないかと思案しているのですがうまくいきません。
WebView2の機能としてあるのではないかと期待しているのですが可能でしょうか?

ソースコード

MainWindow.xaml.cs

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6using System.Windows; 7using System.Windows.Controls; 8using System.Windows.Data; 9using System.Windows.Documents; 10using System.Windows.Input; 11using System.Windows.Media; 12using System.Windows.Media.Imaging; 13using System.Windows.Navigation; 14using System.Windows.Shapes; 15using Microsoft.Web.WebView2.Core; 16 17namespace SampleBrowser 18{ 19 public partial class MainWindow : Window 20 { 21 public static RoutedCommand PasswordAutosaveCommand = new RoutedCommand(); 22 23 CoreWebView2Settings _webViewSettings; 24 CoreWebView2Settings WebViewSettings 25 { 26 get 27 { 28 if (_webViewSettings == null && webView?.CoreWebView2 != null) 29 { 30 _webViewSettings = webView.CoreWebView2.Settings; 31 } 32 return _webViewSettings; 33 } 34 } 35 CoreWebView2Environment _webViewEnvironment; 36 CoreWebView2Environment WebViewEnvironment 37 { 38 get 39 { 40 if (_webViewEnvironment == null && webView?.CoreWebView2 != null) 41 { 42 _webViewEnvironment = webView.CoreWebView2.Environment; 43 } 44 return _webViewEnvironment; 45 } 46 } 47 48 public MainWindow() 49 { 50 InitializeComponent(); 51 } 52 53 void PasswordAutosaveCmdExecuted(object target, ExecutedRoutedEventArgs e) 54 { 55 WebViewSettings.IsPasswordAutosaveEnabled = !WebViewSettings.IsPasswordAutosaveEnabled; 56 } 57 } 58}

MainWindow.xaml

1<Window x:Class="SampleBrowser.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:local="clr-namespace:SampleBrowser" 7 xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf" 8 mc:Ignorable="d" 9 Title="SampleBrowser" Height="800" Width="1000" Background="black" 10 MinWidth="790"> 11 12 <Window.Resources> 13 <wv2:CoreWebView2CreationProperties 14 x:Key="FixedWebView2CreationProperties" 15 BrowserExecutableFolder="Microsoft.WebView2.FixedVersionRuntime.101.0.1210.39.x64" 16 UserDataFolder="C:\temp" /> 17 </Window.Resources> 18 <Grid> 19 <Grid.ColumnDefinitions> 20 <ColumnDefinition/> 21 </Grid.ColumnDefinitions> 22 <wv2:WebView2 CreationProperties="{StaticResource FixedWebView2CreationProperties}" 23 Source="https://account.nicovideo.jp/login?site=niconico&time=1661417293&hash_key=5c045af1&next_url=" 24 Name = "webView"/> 25 26 </Grid> 27 28</Window>

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

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

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

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

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

TN8001

2022/08/25 11:21

[Password autosave + suggest · Issue #2291 · MicrosoftEdge/WebView2Feedback](https://github.com/MicrosoftEdge/WebView2Feedback/issues/2291) > Fix is available in runtimes v101.0.1203.0+. Thanks! となっているのでクリアはしている気がするのですが、最新のランタイムあるいはエバーグリーンモードではどうなりますか? 公式サンプルでざっと確認したところ、ポップアップが出て保存されました(104.0.1293.63) [WebView2Samples/SampleApps/WebView2WpfBrowser at main · MicrosoftEdge/WebView2Samples](https://github.com/MicrosoftEdge/WebView2Samples/tree/main/SampleApps/WebView2WpfBrowser)
b99107

2022/08/26 08:26

ご返信頂きましてありがとうございます。 出来るという事が分かり安心致しました。 状況としましては、最新のランタイムを入れているのですが、ポップアップが出ませんでした。 公式サンプルですが、私の環境でビルドしようとするとインストールしているframeworkをインストールするようにエラーが出てしまい、断念しておりました。 サンプルを動かして確認できるようにチャレンジしたいと思います。 ありがとうございます。
TN8001

2022/08/26 11:41

> 状況としましては、最新のランタイムを入れているのですが、ポップアップが出ませんでした。 BrowserExecutableFolderで特定バージョン(101.0.1210.39.x64)を指定しているように見えますが。。。 BrowserExecutableFolderを書かなければEvergreenになるという認識ですが違いますかね? [WebView2Samples/App.xaml at main · MicrosoftEdge/WebView2Samples](https://github.com/MicrosoftEdge/WebView2Samples/blob/main/SampleApps/WebView2WpfBrowser/App.xaml#L18) > 公式サンプルですが、私の環境でビルドしようとするとインストールしているframeworkをインストールするようにエラーが出てしまい、断念しておりました。 私も警告?は出ましたが、気にせず実行しました^^; netcoreapp3.0;net462 がターゲットですがどちらも入っていません(うちで入っているのはcoreは3.1 fwは4.8) どちらをターゲットしてビルドしても動作しました。
b99107

2022/08/28 05:33

度々返信ありがとうございます。 一から環境を作り直してみたところ、サンプルを動かすことができました。大変助かりました。 また色々とご指摘ありがとうございます。全く理解していませんでした;; あとUIから有効にするのではなく、最初からAutoSaveを有効にするようにしたいと考えています。
TN8001

2022/08/28 06:05

> 最初からAutoSaveを有効にするようにしたいと考えています。 デモなので切り替えられるようになっていますが、常に有効にするなら CoreWebView2InitializationCompleted かなんかで WebViewSettings.IsPasswordAutosaveEnabled = true; とするだけじゃないですかね?(未確認) [WebView2Samples/MainWindow.xaml.cs at main · MicrosoftEdge/WebView2Samples](https://github.com/MicrosoftEdge/WebView2Samples/blob/main/SampleApps/WebView2WpfBrowser/MainWindow.xaml.cs#L1431)
b99107

2022/08/29 01:20

サンプルに頂いた内容を追加することで、最初から有効になることが確認できました。 何度も本当にありがとうございます! サンプルから必要なプログラムをソースコードに組み込んで試してみたいと思います。
TN8001

2022/08/29 02:02

いけそうですね^^ ご自身のコードでも確認が取れましたら、お手数ですが閲覧者にもわかる程度にまとめていただいて「自己解決」としてください。 [teratail【テラテイル】|ITエンジニア特化型Q&Aサイト](https://teratail.com/help#resolve-myself)
b99107

2022/08/29 12:35

時間かかりましたが、自身のソースコードにも適用して、常時パスワードの保存ができるようになりました! 改めてまとめましたら解決方法を記載するように致します。(自己解決とは言い辛いですが^^;) 丁寧に教えて頂きましてありがとうございました!
guest

回答1

0

自己解決

おかげ様で公式サンプルを一部組み込むことで常にパスワード保存が出来るようになりました。

■公式サンプル
https://github.com/MicrosoftEdge/WebView2Samples/tree/main/SampleApps/WebView2WpfBrowser

■作業内容
1)最新のランタイムを設定
BrowserExecutableFolder="Microsoft.WebView2.FixedVersionRuntime.104.0.1293.70.x64"

2)MainWindow.xaml.csの修正
① 公式サンプルから「IsPasswordAutosaveEnabled」関連の記述を追加

② 常にパスワード保存
CoreWebView2InitializationCompleted に「WebViewSettings.IsPasswordAutosaveEnabled = true;」追加

③ 設定反映
public MainWindow()
{
DataContext = this;
InitializeComponent();
AttachControlEventHandlers(webView);
}

基本的な内容を上記の通りです。
2)①③でエラーが出る場合は、公式サンプルから必要な部分をコピーして持ってきています。
未確認ですが2)①は不要ではないかと思っていますので、時間が出来たら検証してみたいと思います。

ご回答頂きましてありがとうございました。

投稿2022/09/08 08:09

b99107

総合スコア47

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問