WebView
.NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI), WebView bir uygulamada uzak web sayfalarını, yerel HTML dosyalarını ve HTML dizelerini görüntüler. Görüntülenen WebView içerik, Basamaklı Stil Sayfaları (CSS) ve JavaScript desteği içerir. .NET MAUI projeleri varsayılan olarak uzak bir web sayfasını görüntülemek için WebView gereken platform izinlerini içerir.
WebView aşağıdaki özellikleri tanımlar:
- Cookiestüründe
CookieContainer
, tanımlama bilgileri koleksiyonu için depolama alanı sağlar. - CanGoBack, türündeki
bool
kullanıcının önceki sayfalara gidip gitemeyeceğini gösterir. Bu salt okunur bir özelliktir. - CanGoForward
bool
türünde, kullanıcının ileriye gidip gitemeyeceğini gösterir. Bu salt okunur bir özelliktir. - Source, türünde
WebViewSource
, öğesinin görüntülediği WebView konumu temsil eder. - UserAgent, türündeki
string
kullanıcı aracısını temsil eder. Varsayılan değer, temel alınan platform tarayıcısının kullanıcı aracısıdır veyanull
belirlenemezse.
Bu özellikler nesneler tarafından BindableProperty desteklenir; bu da veri bağlamalarının hedefleri olabileceği ve stillendirilebileceği anlamına gelir.
Source
özelliği, her ikisi de öğesinden WebViewSource
türetilen bir UrlWebViewSource
HtmlWebViewSource
nesneye veya nesneye ayarlanabilir. , UrlWebViewSource
URL ile belirtilen bir web sayfasını yüklemek için kullanılırken, nesne HtmlWebViewSource
ise yerel HTML dosyasını veya yerel HTML'yi yüklemek için kullanılır.
WebView sayfa gezintisi başladığında tetiklenen bir Navigating
olayı ve sayfa gezintisi tamamlandığında tetiklenen olayı Navigated
tanımlar. Olaya WebNavigatingEventArgs
eşlik eden nesne, gezintiyi Navigating
iptal etmek için kullanılabilecek türde bool
bir Cancel
özellik tanımlar. Olaya WebNavigatedEventArgs
eşlik Navigated
eden nesne, gezinti sonucunu gösteren türde WebNavigationResult
bir Result
özellik tanımlar.
WebView aşağıdaki olayları tanımlar:
Navigating
, sayfa gezintisi başladığında tetikler.WebNavigatingEventArgs
Bu olaya eşlik eden nesne, gezintiyi iptal etmek için kullanılabilecek türdebool
birCancel
özellik tanımlar.Navigated
, sayfa gezintisi tamamlandığında oluşturulur.WebNavigatedEventArgs
Bu olaya eşlik eden nesne, gezinti sonucunu gösteren türdeWebNavigationResult
birResult
özellik tanımlar.ProcessTerminated
, bir işlem beklenmedik şekilde WebView sona erdiğinde tetikler.WebViewProcessTerminatedEventArgs
Bu olaya eşlik eden nesne, işlemin neden başarısız olduğunu gösteren platforma özgü özellikleri tanımlar.
Önemli
bir WebView , StackLayoutveya VerticalStackLayoutiçinde bulunduğunda HorizontalStackLayoutve WidthRequest özelliklerini belirtmelidirHeightRequest. Bu özellikleri belirtmezseniz, WebView işlenmez.
Web sayfası görüntüleme
Uzak bir web sayfasını görüntülemek için özelliğini URI'yi belirten bir string
olarak ayarlayınSource
:
<WebView Source="https://video2.skills-academy.com/dotnet/maui" />
Eşdeğer C# kodu:
WebView webvView = new WebView
{
Source = "https://video2.skills-academy.com/dotnet/maui"
};
URI'ler belirtilen protokolle tam olarak oluşturulmalıdır.
Not
Source
özelliği türünde WebViewSource
olmasına rağmen, özelliği dize tabanlı bir URI'ye ayarlanabilir. Bunun nedeni.NET MAUI'nin dize tabanlı URI'yi bir nesneye dönüştüren bir tür dönüştürücüsü ve örtük dönüştürme UrlWebViewSource
işleci içermesidir.
iOS ve Mac Catalyst'te Uygulama Aktarım Güvenliğini Yapılandırma
Sürüm 9'dan bu yana iOS yalnızca uygulamanızın güvenli sunucularla iletişim kurmasına izin verir. Bir uygulamanın güvenli olmayan sunucularla iletişimi etkinleştirmeyi seçmesi gerekir.
Aşağıdaki Info.plist yapılandırması, belirli bir etki alanının Apple Aktarım Güvenliği (ATS) gereksinimlerini atlamak için nasıl etkinleştirileceği gösterir:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>mydomain.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
Yalnızca belirli etki alanlarının ATS'yi atlamasına olanak tanımak ve güvenilir olmayan etki alanlarında ek güvenlikten yararlanırken güvenilen siteleri kullanmanıza olanak tanımak en iyi yöntemdir.
Aşağıdaki Info.plist yapılandırması, bir uygulama için ATS'yi devre dışı bırakma işlemini gösterir:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Önemli
Uygulamanız güvenli olmayan bir web sitesine bağlantı gerektiriyorsa, anahtarı kullanarak NSExceptionDomains
ATS'yi tamamen NSAllowsArbitraryLoads
kapatmak yerine etki alanını her zaman özel durum olarak girmeniz gerekir.
Yerel HTML'i görüntüle
Satır içi HTML görüntülemek için özelliğini bir HtmlWebViewSource
nesne olarak ayarlayınSource
:
<WebView>
<WebView.Source>
<HtmlWebViewSource Html="<HTML><BODY><H1>.NET MAUI</H1><P>Welcome to WebView.</P></BODY><HTML>" />
</WebView.Source>
</WebView>
XAML'de VE >
simgelerinden kaçış <
nedeniyle HTML dizeleri okunamaz hale gelebilir. Bu nedenle, daha fazla okunabilirlik için HTML bir CDATA
bölümde çizili olabilir:
<WebView>
<WebView.Source>
<HtmlWebViewSource>
<HtmlWebViewSource.Html>
<![CDATA[
<HTML>
<BODY>
<H1>.NET MAUI</H1>
<P>Welcome to WebView.</P>
</BODY>
</HTML>
]]>
</HtmlWebViewSource.Html>
</HtmlWebViewSource>
</WebView.Source>
</WebView>
Eşdeğer C# kodu:
WebView webView = new WebView
{
Source = new HtmlWebViewSource
{
Html = @"<HTML><BODY><H1>.NET MAUI</H1><P>Welcome to WebView.</P></BODY></HTML>"
}
};
Yerel HTML dosyası görüntüleme
Yerel bir HTML dosyası görüntülemek için, dosyayı uygulama projenizin Resources\Raw klasörüne ekleyin ve derleme eylemini MauiAsset olarak ayarlayın. Ardından, dosya özelliğin değeri Source
olarak ayarlanmış bir HtmlWebViewSource
nesnede tanımlanan satır içi HTML'den yüklenebilir:
<WebView>
<WebView.Source>
<HtmlWebViewSource>
<HtmlWebViewSource.Html>
<![CDATA[
<html>
<head>
</head>
<body>
<h1>.NET MAUI</h1>
<p>The CSS and image are loaded from local files!</p>
<p><a href="localfile.html">next page</a></p>
</body>
</html>
]]>
</HtmlWebViewSource.Html>
</HtmlWebViewSource>
</WebView.Source>
</WebView>
Yerel HTML dosyası, MauiAsset derleme eylemiyle uygulama projenize de eklendiyse, Basamaklı Stil Sayfaları (CSS), JavaScript ve görüntüler yükleyebilir.
Ham varlıklar hakkında daha fazla bilgi için bkz . Ham varlıklar.
İçeriği yeniden yükleme
WebView kaynağını yeniden yüklemek için çağrılabilecek bir Reload
yöntemi vardır:
WebView webView = new WebView();
...
webView.Reload();
Reload
Yöntemi çağrıldığında ReloadRequested
olay tetiklenir ve geçerli içeriği yeniden yüklemek için bir istekte bulunulduğunu gösterir.
Gezinti gerçekleştirme
WebViewve GoForward
yöntemleriyle programlı gezintiyi GoBack
destekler. Bu yöntemler sayfa yığınında gezinmeyi WebView etkinleştirir ve yalnızca ve CanGoForward
özelliklerinin değerleri CanGoBack
incelenirken çağrılmalıdır:
WebView webView = new WebView();
...
// Go backwards, if allowed.
if (webView.CanGoBack)
{
webView.GoBack();
}
// Go forwards, if allowed.
if (webView.CanGoForward)
{
webView.GoForward();
}
bir WebViewiçinde sayfa gezintisi gerçekleştiğinde, program aracılığıyla veya kullanıcı tarafından başlatılan aşağıdaki olaylar gerçekleşir:
Navigating
, sayfa gezintisi başladığında oluşturulur. OlayaWebNavigatingEventArgs
eşlik eden nesne, gezintiyiNavigating
iptal etmek için kullanılabilecek türdebool
birCancel
özellik tanımlar.Navigated
, sayfa gezintisi tamamlandığında oluşturulur. OlayaWebNavigatedEventArgs
eşlikNavigated
eden nesne, gezinti sonucunu gösteren türdeWebNavigationResult
birResult
özellik tanımlar.
Android'de izinleri işleme
Cihazın kamera veya mikrofon gibi kayıt donanımına erişim isteyen bir sayfaya göz atarken denetim tarafından WebView izin verilmelidir. Denetim, WebView
izin isteklerine Android.Webkit.WebChromeClient tepki vermek için Android'de türünü kullanır. Ancak, WebChromeClient
.NET MAUI tarafından sağlanan uygulama izin isteklerini yoksayar. İzin isteklerini devralan MauiWebChromeClient
ve onaylayan yeni bir tür oluşturmanız gerekir.
Önemli
WebView
bu yaklaşımı kullanarak izin isteklerini onaylamak için öğesini özelleştirmek için Android API 26 veya üzeri gerekir.
Web sayfasından denetime yönelik WebView
izin istekleri, .NET MAUI uygulamasından kullanıcıya yapılan izin isteklerinden farklıdır. .NET MAUI uygulama izinleri, tüm uygulama için kullanıcı tarafından istenir ve onaylar. Denetim WebView
, uygulamaların donanıma erişme yeteneğine bağlıdır. Bu kavramı göstermek için cihazın kamerasına erişim isteyen bir web sayfası düşünün. Bu istek denetim tarafından WebView
onaylanmış olsa bile .NET MAUI uygulamasının kameraya erişmek için kullanıcı tarafından onayı olmasa da web sayfası kameraya erişemez.
Aşağıdaki adımlar, kamerayı kullanmak için denetimden gelen izin isteklerinin WebView
nasıl kesilip durdurulduğunu gösterir. Mikrofonu kullanmaya çalışıyorsanız, kamerayla ilgili izinler yerine mikrofonla ilgili izinleri kullanmanız dışında adımlar benzer olacaktır.
İlk olarak, Android bildirimine gerekli uygulama izinlerini ekleyin. Platformlar/Android/AndroidManifest.xml dosyasını açın ve düğüme
manifest
aşağıdakileri ekleyin:<uses-permission android:name="android.permission.CAMERA" />
Uygulamanızın belirli bir
WebView
noktasında, örneğin denetim içeren sayfa yüklendiğinde, uygulamanın kameraya erişmesine izin vermek için kullanıcıdan izin isteyin.private async Task RequestCameraPermission() { PermissionStatus status = await Permissions.CheckStatusAsync<Permissions.Camera>(); if (status != PermissionStatus.Granted) await Permissions.RequestAsync<Permissions.Camera>(); }
Aşağıdaki sınıfı Platforms/Android klasörüne ekleyerek kök ad alanını projenizin ad alanıyla eşleşecek şekilde değiştirin:
using Android.Webkit; using Microsoft.Maui.Handlers; using Microsoft.Maui.Platform; namespace MauiAppWebViewHandlers.Platforms.Android; internal class MyWebChromeClient: MauiWebChromeClient { public MyWebChromeClient(IWebViewHandler handler) : base(handler) { } public override void OnPermissionRequest(PermissionRequest request) { // Process each request foreach (var resource in request.GetResources()) { // Check if the web page is requesting permission to the camera if (resource.Equals(PermissionRequest.ResourceVideoCapture, StringComparison.OrdinalIgnoreCase)) { // Get the status of the .NET MAUI app's access to the camera PermissionStatus status = Permissions.CheckStatusAsync<Permissions.Camera>().Result; // Deny the web page's request if the app's access to the camera is not "Granted" if (status != PermissionStatus.Granted) request.Deny(); else request.Grant(request.GetResources()); return; } } base.OnPermissionRequest(request); } }
Önceki kod parçacığında
MyWebChromeClient
, sınıfı öğesindenMauiWebChromeClient
devralır ve web sayfası izin isteklerini kesmek için yöntemini geçersiz kılarOnPermissionRequest
. Her izin öğesi, kamerayı temsil eden dize sabitiPermissionRequest.ResourceVideoCapture
ile eşleşip eşleşmediğini görmek için denetlenir. Bir kamera izni eşleşirse kod, uygulamanın kamerayı kullanma izni olup olmadığını denetler. İzin varsa, web sayfasının isteği verilir.Chrome istemcisini SetWebChromeClient
MyWebChromeClient
olarak ayarlamak için Android'inWebView
denetimindeki yöntemini kullanın. Aşağıdaki iki öğe, chrome istemcisini nasıl ayarlayabileceğinizi gösterir:adlı
theWebViewControl
bir .NET MAUIWebView
denetimi verildiğinde chrome istemcisini doğrudan Android denetimi olan platform görünümünde ayarlayabilirsiniz:((IWebViewHandler)theWebViewControl.Handler).PlatformView.SetWebChromeClient(new MyWebChromeClient((IWebViewHandler)theWebViewControl.Handler));
Ayrıca, tüm
WebView
denetimleri chrome istemcinizi kullanmaya zorlamak için işleyici özellik eşlemesini de kullanabilirsiniz. Daha fazla bilgi için bkz . İşleyiciler.Uygulama başlatıldığında aşağıdaki kod parçacığının
CustomizeWebViewHandler
yöntemi çağrılmalıdır, örneğin yöntemindeMauiProgram.CreateMauiApp
.private static void CustomizeWebViewHandler() { #if ANDROID26_0_OR_GREATER Microsoft.Maui.Handlers.WebViewHandler.Mapper.ModifyMapping( nameof(Android.Webkit.WebView.WebChromeClient), (handler, view, args) => handler.PlatformView.SetWebChromeClient(new MyWebChromeClient(handler))); #endif }
Tanımlama bilgilerini ayarlama
Tanımlama bilgileri, belirtilen URL'ye web isteğiyle gönderilecek şekilde bir WebView üzerinde ayarlanabilir. tanımlama bilgilerini, bir CookieContainer
öğesine nesne ekleyerek Cookie
ayarlayın ve sonra kapsayıcıyı bağlanabilir özelliğin WebView.Cookies
değeri olarak ayarlayın. Aşağıdaki kodda bir örnek gösterilir:
using System.Net;
CookieContainer cookieContainer = new CookieContainer();
Uri uri = new Uri("https://video2.skills-academy.com/dotnet/maui", UriKind.RelativeOrAbsolute);
Cookie cookie = new Cookie
{
Name = "DotNetMAUICookie",
Expires = DateTime.Now.AddDays(1),
Value = "My cookie",
Domain = uri.Host,
Path = "/"
};
cookieContainer.Add(uri, cookie);
webView.Cookies = cookieContainer;
webView.Source = new UrlWebViewSource { Url = uri.ToString() };
Bu örnekte, nesneye CookieContainer
tek Cookie
bir eklenir ve bu özellik değeri WebView.Cookies
olarak ayarlanır. belirtilen URL'ye WebView bir web isteği gönderdiğinde, istekle birlikte tanımlama bilgisi gönderilir.
JavaScript'i çağırma
WebView C# dilinden bir JavaScript işlevi çağırma ve C# kodunu çağıran herhangi bir sonucu döndürme özelliğini içerir. Bu birlikte çalışma aşağıdaki örnekte gösterilen yöntemiyle EvaluateJavaScriptAsync
gerçekleştirilir:
Entry numberEntry = new Entry { Text = "5" };
Label resultLabel = new Label();
WebView webView = new WebView();
...
int number = int.Parse(numberEntry.Text);
string result = await webView.EvaluateJavaScriptAsync($"factorial({number})");
resultLabel.Text = $"Factorial of {number} is {result}.";
yöntemi bağımsız WebView.EvaluateJavaScriptAsync
değişken olarak belirtilen JavaScript'i değerlendirir ve sonucu olarak string
döndürür. Bu örnekte, factorial
sonuç olarak faktöriyelini number
döndüren JavaScript işlevi çağrılır. Bu JavaScript işlevi, yüklenen yerel HTML dosyasında WebView tanımlanır ve aşağıdaki örnekte gösterilmiştir:
<html>
<body>
<script type="text/javascript">
function factorial(num) {
if (num === 0 || num === 1)
return 1;
for (var i = num - 1; i >= 1; i--) {
num *= i;
}
return num;
}
</script>
</body>
</html>
iOS ve Mac Catalyst üzerinde yerel WebView'ı yapılandırma
Yerel WebView denetim, sürümünden türetilen WKWebView
iOS ve Mac Catalyst üzerindedirMauiWKWebView
. Oluşturucu aşırı yüklemelerinden MauiWKWebView
biri, nesnenin nasıl yapılandırılacağı hakkında bilgi sağlayan bir WKWebViewConfiguration
nesnenin belirtilmesine WKWebView
olanak tanır. Tipik yapılandırmalar, kullanıcı aracısını ayarlamayı, web içeriğinizin kullanımına sunulacak tanımlama bilgilerini belirtmeyi ve web içeriğinize özel betikler eklemeyi içerir.
Uygulamanızda bir WKWebViewConfiguration
nesne oluşturabilir ve ardından özelliklerini gerektiği gibi yapılandırabilirsiniz. Alternatif olarak statik yöntemini çağırarak MauiWKWebView.CreateConfiguration
.NET MAUI'nin WKWebViewConfiguration
nesnesini alabilir ve sonra değiştirebilirsiniz. Nesne WKWebViewConfiguration
daha sonra oluşturucu aşırı yüklemesine MauiWKWebView
bağımsız değişken olarak belirtilebilir.
İşleyicinin platform görünümü oluşturulduktan sonra iOS ve Mac Catalyst'te yerel WebView yapılandırma değiştirilebileceğinden, değiştirmek için özel bir işleyici fabrikası temsilcisi oluşturmanız gerekir:
#if IOS || MACCATALYST
using WebKit;
using CoreGraphics;
using Microsoft.Maui.Platform;
using Microsoft.Maui.Handlers;
#endif
...
#if IOS || MACCATALYST
Microsoft.Maui.Handlers.WebViewHandler.PlatformViewFactory = (handler) =>
{
WKWebViewConfiguration config = MauiWKWebView.CreateConfiguration();
config.ApplicationNameForUserAgent = "MyProduct/1.0.0";
return new MauiWKWebView(CGRect.Empty, (WebViewHandler)handler, config);
};
#endif
Not
uygulamanızda görüntülenmeden önce WebView bir WKWebViewConfiguration
nesneyle yapılandırmanız MauiWKWebView
gerekir. Bunu yapmak için uygun konumlar uygulamanızın başlangıç yolundadır; örneğin , MauiProgram.cs veya App.xaml.cs.
iOS ve Mac Catalyst'te medya kayıttan yürütme tercihlerini ayarlama
Otomatik yürütme ve resimdeki resim de dahil olmak üzere HTML5 videonun satır içi medya kayıttan yürütmesi, iOS ve Mac Catalyst üzerinde varsayılan olarak WebView etkindir. Bu varsayılanı değiştirmek veya diğer medya kayıttan yürütme tercihlerini ayarlamak için, işleyicinin platform görünümü oluşturulduktan sonra medya kayıttan yürütme tercihleri değiştirilebileceğinden özel bir işleyici fabrikası temsilcisi oluşturmanız gerekir. Aşağıdaki kodda bunun bir örneği gösterilmektedir:
#if IOS || MACCATALYST
using WebKit;
using CoreGraphics;
using Microsoft.Maui.Platform;
using Microsoft.Maui.Handlers;
#endif
...
#if IOS || MACCATALYST
Microsoft.Maui.Handlers.WebViewHandler.PlatformViewFactory = (handler) =>
{
WKWebViewConfiguration config = MauiWKWebView.CreateConfiguration();
// True to play HTML5 videos inliine, false to use the native full-screen controller.
config.AllowsInlineMediaPlayback = false;
// True to play videos over AirPlay, otherwise false.
config.AllowsAirPlayForMediaPlayback = false;
// True to let HTML5 videos play Picture in Picture.
config.AllowsPictureInPictureMediaPlayback = false;
// Media types that require a user gesture to begin playing.
config.MediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypes.All;
return new MauiWKWebView(CGRect.Empty, (WebViewHandler)handler, config);
};
#endif
iOS'ta yapılandırma WebView hakkında daha fazla bilgi için bkz . iOS ve Mac Catalyst'ta yerel WebView'ı yapılandırma.
Mac'te WebView Catalyst'i inceleme
Mac Catalyst'te safari WebView geliştirici araçlarını kullanarak içeriğini incelemek için aşağıdaki kodu uygulamanıza ekleyin:
#if MACCATALYST
Microsoft.Maui.Handlers.WebViewHandler.Mapper.AppendToMapping("Inspect", (handler, view) =>
{
if (OperatingSystem.IsMacCatalystVersionAtLeast(16, 6))
handler.PlatformView.Inspectable = true;
});
#endif
Bu kod, içeriği Safari geliştirici araçları tarafından denetlenebilir hale getirmek WebView için WebViewHandler
Mac Catalyst'in özellik eşleyicisini özelleştirir. İşleyiciler hakkında daha fazla bilgi için bkz . İşleyiciler.
Safari geliştirici araçlarını Mac Catalyst uygulamasıyla kullanmak için:
- Mac bilgisayarınızda Safari'i açın.
- Safari'de, menü çubuğunda Safari > Ayarları > Gelişmiş > Geliştirme menüsünü göster onay kutusunu seçin.
- .NET MAUI Mac Catalyst uygulamanızı çalıştırın.
- Safari'de, yer tutucunun gibi
Macbook Pro
cihaz adınız olduğu{Device name}
{Cihaz adı} geliştir > menüsünü seçin. Ardından uygulama adınızın altındaki girdiyi seçerek çalışan uygulamanızı da vurgulayabilirsiniz. Bu, Web denetçisi penceresinin görünmesine neden olur.
Sistem tarayıcısını başlatma
tarafından sağlanan Microsoft.Maui.Essentials
sınıfıyla Launcher
sistem web tarayıcısında bir URI açmak mümkündür. Başlatıcının yöntemini çağırın OpenAsync
ve açılacak URI'yi temsil eden bir string
veya Uri
bağımsız değişkenini geçirin:
await Launcher.OpenAsync("https://video2.skills-academy.com/dotnet/maui");
Daha fazla bilgi için bkz . Launcher.