Komponen WebView yang Ditingkatkan untuk Android yang berfungsi sebagaimana dimaksud di luar kotak
Deklarasikan Repositori Lulusan di Root build.gradle Anda
allprojects {
repositories {
maven { url " https://jitpack.io " }
}
} Deklarasikan Ketergantungan Lulusan di Modul Aplikasi Anda build.gradle
dependencies {
implementation ' com.github.delight-im:Android-AdvancedWebView:v3.2.1 '
}< uses-permission android : name = " android.permission.INTERNET " />< im .delight.android.webview.AdvancedWebView
android : id = " @+id/webview "
android : layout_width = " match_parent "
android : layout_height = " match_parent " /> public class MyActivity extends Activity implements AdvancedWebView . Listener {
private AdvancedWebView mWebView ;
@ Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
setContentView ( R . layout . activity_my );
mWebView = ( AdvancedWebView ) findViewById ( R . id . webview );
mWebView . setListener ( this , this );
mWebView . setMixedContentAllowed ( false );
mWebView . loadUrl ( "http://www.example.org/" );
// ...
}
@ SuppressLint ( "NewApi" )
@ Override
protected void onResume () {
super . onResume ();
mWebView . onResume ();
// ...
}
@ SuppressLint ( "NewApi" )
@ Override
protected void onPause () {
mWebView . onPause ();
// ...
super . onPause ();
}
@ Override
protected void onDestroy () {
mWebView . onDestroy ();
// ...
super . onDestroy ();
}
@ Override
protected void onActivityResult ( int requestCode , int resultCode , Intent intent ) {
super . onActivityResult ( requestCode , resultCode , intent );
mWebView . onActivityResult ( requestCode , resultCode , intent );
// ...
}
@ Override
public void onBackPressed () {
if (! mWebView . onBackPressed ()) { return ; }
// ...
super . onBackPressed ();
}
@ Override
public void onPageStarted ( String url , Bitmap favicon ) { }
@ Override
public void onPageFinished ( String url ) { }
@ Override
public void onPageError ( int errorCode , String description , String failingUrl ) { }
@ Override
public void onDownloadRequested ( String url , String suggestedFilename , String mimeType , long contentLength , String contentDisposition , String userAgent ) { }
@ Override
public void onExternalPageRequest ( String url ) { }
}android.app.Fragment ) Catatan: Jika Anda menggunakan kelas Fragment dari pustaka dukungan ( android.support.v4.app.Fragment ), silakan merujuk ke bagian berikutnya (lihat di bawah) alih -alih yang ini.
public class MyFragment extends Fragment implements AdvancedWebView . Listener {
private AdvancedWebView mWebView ;
public MyFragment () { }
@ Override
public View onCreateView ( LayoutInflater inflater , ViewGroup container , Bundle savedInstanceState ) {
View rootView = inflater . inflate ( R . layout . fragment_my , container , false );
mWebView = ( AdvancedWebView ) rootView . findViewById ( R . id . webview );
mWebView . setListener ( this , this );
mWebView . setMixedContentAllowed ( false );
mWebView . loadUrl ( "http://www.example.org/" );
// ...
return rootView ;
}
@ SuppressLint ( "NewApi" )
@ Override
public void onResume () {
super . onResume ();
mWebView . onResume ();
// ...
}
@ SuppressLint ( "NewApi" )
@ Override
public void onPause () {
mWebView . onPause ();
// ...
super . onPause ();
}
@ Override
public void onDestroy () {
mWebView . onDestroy ();
// ...
super . onDestroy ();
}
@ Override
public void onActivityResult ( int requestCode , int resultCode , Intent intent ) {
super . onActivityResult ( requestCode , resultCode , intent );
mWebView . onActivityResult ( requestCode , resultCode , intent );
// ...
}
@ Override
public void onPageStarted ( String url , Bitmap favicon ) { }
@ Override
public void onPageFinished ( String url ) { }
@ Override
public void onPageError ( int errorCode , String description , String failingUrl ) { }
@ Override
public void onDownloadRequested ( String url , String suggestedFilename , String mimeType , long contentLength , String contentDisposition , String userAgent ) { }
@ Override
public void onExternalPageRequest ( String url ) { }
}android.support.v4.app.Fragment ) Gunakan kode untuk penggunaan Fragment normal seperti yang ditunjukkan di atas
Mengubah
mWebView . setListener ( this , this );ke
mWebView . setListener ( getActivity (), this ); Tambahkan kode berikut ke FragmentActivity induk untuk meneruskan hasil dari FragmentActivity ke instance Fragment yang sesuai
public class MyActivity extends FragmentActivity implements AdvancedWebView . Listener {
@ Override
public void onActivityResult ( int requestCode , int resultCode , Intent intent ) {
super . onActivityResult ( requestCode , resultCode , intent );
if ( mFragment != null ) {
mFragment . onActivityResult ( requestCode , resultCode , intent );
}
}
} -keep class * extends android.webkit.WebChromeClient { *; }
-dontwarn im.delight.android.webview.**
Jika Anda ingin melayani situs atau hanya sumber daya tunggal di atas http biasa alih -alih https , biasanya tidak ada yang bisa dilakukan jika Anda menargetkan Android 8.1 (API level 27) atau lebih awal. Di Android 9 (Level API 28) dan kemudian, dukungan ClearText dinonaktifkan secara default. Anda mungkin harus mengatur android:usesCleartextTraffic="true" pada elemen <application> di AndroidManifest.xml atau memberikan konfigurasi keamanan jaringan khusus.
Dioptimalkan untuk kinerja dan keamanan terbaik
Fitur ditambal di seluruh versi Android
Upload file ditangani secara otomatis (periksa ketersediaan dengan AdvancedWebView.isFileUploadAvailable() )
multiple atribut dalam HTML) didukung pada Android 5.0+. Aplikasi yang digunakan untuk memilih file (IE biasanya galeri atau aplikasi manajer file) harus menyediakan kontrol untuk memilih beberapa file, yang tidak.JavaScript dan WebStorage diaktifkan secara default
Termasuk lokalisasi untuk 25 bahasa yang paling banyak diucapkan
Menerima panggilan balik saat halaman mulai/selesai memuat atau memiliki kesalahan
@ Override
public void onPageStarted ( String url , Bitmap favicon ) {
// a new page started loading
}
@ Override
public void onPageFinished ( String url ) {
// the new page finished loading
}
@ Override
public void onPageError ( int errorCode , String description , String failingUrl ) {
// the new page failed to load
}Unduhan ditangani secara otomatis dan dapat didengarkan
@ Override
public void onDownloadRequested ( String url , String suggestedFilename , String mimeType , long contentLength , String contentDisposition , String userAgent ) {
// some file is available for download
// either handle the download yourself or use the code below
if ( AdvancedWebView . handleDownload ( this , url , suggestedFilename )) {
// download successfully handled
}
else {
// download couldn't be handled because user has disabled download manager app on the device
// TODO show some notice to the user
}
} Aktifkan dukungan geolokasi (kebutuhan <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> )
mWebView . setGeolocationEnabled ( true );Tambahkan header http khusus selain yang dikirim oleh implementasi browser web
mWebView . addHttpHeader ( "X-Requested-With" , "My wonderful app" );Tentukan satu set kustom nama host yang diizinkan dan terima panggilan balik untuk semua nama host lainnya
mWebView . addPermittedHostname ( "example.org" );Dan
@ Override
public void onExternalPageRequest ( String url ) {
// the user tried to open a page from a non-permitted hostname
}Mencegah caching halaman html
boolean preventCaching = true ;
mWebView . loadUrl ( "http://www.example.org/" , preventCaching );Periksa browser alternatif yang diinstal pada perangkat
if ( AdvancedWebView . Browsers . hasAlternative ( this )) {
AdvancedWebView . Browsers . openUrl ( this , "http://www.example.org/" );
}Nonaktifkan cookie
// disable third-party cookies only
mWebView . setThirdPartyCookiesEnabled ( false );
// or disable cookies in general
mWebView . setCookiesEnabled ( false );Izinkan atau Larang Konten Campuran (Baik Pasif dan Aktif) (Konten HTTP dimuat di dalam situs HTTPS)
mWebView . setMixedContentAllowed ( true );
// or
mWebView . setMixedContentAllowed ( false );Beralih antara mode seluler dan desktop
mWebView . setDesktopMode ( true );
// or
// mWebView.setDesktopMode(false); Muat file html dari "aset" (misalnya di app/src/main/assets/html/index.html )
mWebView . loadUrl ( "file:///android_asset/html/index.html" );Muat file HTML dari kartu SD
// <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
if ( Environment . getExternalStorageState (). equals ( Environment . MEDIA_MOUNTED )) {
mWebView . getSettings (). setAllowFileAccess ( true );
mWebView . loadUrl ( "file:///sdcard/Android/data/com.my.app/my_folder/index.html" );
}Muat teks dan tampilan sumber HTML sebagai halaman
myWebView . loadHtml ( "<html>...</html>" );
// or
final String myBaseUrl = "http://www.example.com/" ;
myWebView . loadHtml ( "<html>...</html>" , myBaseUrl );Aktifkan dukungan multi-window
myWebView . getSettings (). setSupportMultipleWindows ( true );
// myWebView.getSettings().setJavaScriptEnabled(true);
// myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
myWebView . setWebChromeClient ( new WebChromeClient () {
@ Override
public boolean onCreateWindow ( WebView view , boolean isDialog , boolean isUserGesture , Message resultMsg ) {
AdvancedWebView newWebView = new AdvancedWebView ( MyNewActivity . this );
// myParentLayout.addView(newWebView, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
WebView . WebViewTransport transport = ( WebView . WebViewTransport ) resultMsg . obj ;
transport . setWebView ( newWebView );
resultMsg . sendToTarget ();
return true ;
}
}Semua kontribusi dipersilakan! Jika Anda ingin berkontribusi, silakan buat masalah terlebih dahulu sehingga fitur, masalah, atau pertanyaan Anda dapat dibahas.
Proyek ini dilisensikan berdasarkan ketentuan lisensi MIT.