Xamarin.Forms でキャッシュされない WebView を作ってみた
Xamarin.Forms でキャッシュされない WebView を作ってみました.
開発環境
- Visual Studio Community 2017 Version 15.4.1
- Xamarin 4.7.10.22 (fe36bec)
- Xamarin.Android 8.0.0.33 (HEAD/7a6a056e8)
- Xamarin.iOS 11.2.0.8 (9a9f054)
PCL
using Xamarin.Forms;
namespace WebViewSample
{
class NoCachedWebView : WebView
{
}
}
WebView を拡張した NoCachedWebView を作ります.
XAML での使い方は通常の WebView と変わらず.
Android
using Xamarin.Forms;
using WebViewSample.Droid;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(WebView), typeof(NoCachedWebViewRenderer))]
namespace WebViewSample.Droid
{
class NoCachedWebViewRenderer : WebViewRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs e)
{
base.OnElementChanged(e);
if (Control == null) return;
Control.ClearCache(true);
Control.Settings.SetAppCacheEnabled(false);
Control.Settings.CacheMode = Android.Webkit.CacheModes.NoCache;
}
}
}
Custom Renderer でキャッシュを無効化する処理を書きます.
iOS
【10/29 更新】
@_shunsuke_kawai さんにアドバイスをいただき、全面的に修正しました.
using System;
using Foundation;
using UIKit;
using Xamarin.Forms.Platform.iOS;
using Xamarin.Forms;
using WebViewSample.iOS;
[assembly: ExportRenderer(typeof(WebView), typeof(NoCachedWebViewRenderer))]
namespace WebViewSample.iOS
{
class NoCachedWebViewRenderer : WebViewRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
if (Element == null) return;
NSUrlCache.SharedCache.RemoveAllCachedResponses();
NSUrlCache.SharedCache.MemoryCapacity = 0;
NSUrlCache.SharedCache.DiskCapacity = 0;
}
}
}
iOS も Android と同じように Custom Renderer でキャッシュを無効化する処理を書きます.
以上です.
参考
Xamarin.iOS で UIWebView から C# のコードを呼び出す方法
Installed 5.9 (Build 431) — “Event registration is overwriting existing delegate…” error
ディスカッション
コメント一覧
まだ、コメントがありません