Pustaka tampilan web lintas platform kecil untuk C/C++ untuk membangun GUI lintas platform modern.
Tujuan dari proyek ini adalah untuk membuat lapisan abstraksi UI HTML5 yang umum untuk platform yang paling banyak digunakan.
Ini mendukung pengikatan JavaScript dua arah (untuk memanggil JavaScript dari C/C++ dan untuk memanggil C/C++ dari JavaScript).
Catatan
Pengikatan bahasa untuk Go telah dipindahkan. Versi <= 0.1.1 tersedia di repositori ini .
Platform | Teknologi |
---|---|
Linux | GTK, WebKitGTK |
macOS | Kakao, WebKit |
jendela | API Windows, Tampilan Web2 |
Dokumentasi terbaru ada di kode sumber. Memperbaiki dokumentasi adalah upaya berkelanjutan dan Anda dipersilakan untuk berkontribusi.
Kompiler Anda harus mendukung minimum C++11 kecuali untuk platform yang memerlukan versi yang lebih modern.
Proyek ini menggunakan CMake dan Ninja, dan meskipun direkomendasikan demi kenyamanan Anda, alat ini tidak diperlukan untuk menggunakan perpustakaan.
Pustaka GTK dan WebKitGTK diperlukan untuk pengembangan dan distribusi. Anda perlu memeriksa repositori paket Anda mengenai paket mana yang akan diinstal.
apt install libgtk-4-dev libwebkitgtk-6.0-dev
apt install libgtk-4-1 libwebkitgtk-6.0-4
apt install libgtk-3-dev libwebkit2gtk-4.1-dev
apt install libgtk-3-0 libwebkit2gtk-4.1-0
apt install libgtk-3-dev libwebkit2gtk-4.0-dev
apt install libgtk-3-0 libwebkit2gtk-4.0-37
dnf install gtk4-devel webkitgtk6.0-devel
dnf install gtk4 webkitgtk6.0
dnf install gtk3-devel webkit2gtk4.1-devel
dnf install gtk3 webkit2gtk4.1
dnf install gtk3-devel webkit2gtk4.0-devel
dnf install gtk3 webkit2gtk4.0
pkg install webkit2-gtk4
pkg install webkit2-gtk3
pkg-config
dengan --cflags
dan --libs
untuk mendapatkan opsi compiler/linker untuk salah satu rangkaian modul berikut:gtk4 webkitgtk-6.0
gtk+-3.0 webkit2gtk-4.1
gtk+-3.0 webkit2gtk-4.0
dl
WebKit
dl
advapi32 ole32 shell32 shlwapi user32 version
wxallowed
(lihat mount(8)) ke fstab Anda untuk melewati perlindungan memori W^X untuk file yang dapat dieksekusi. Silakan lihat apakah ini berfungsi tanpa menonaktifkan fitur keamanan ini terlebih dahulu.Kompiler Anda harus mendukung C++14 dan kami menyarankan untuk memasangkannya dengan SDK Windows 10 terbaru.
Untuk Visual C++ kami merekomendasikan Visual Studio 2022 atau lebih baru. Ada beberapa persyaratan saat menggunakan MinGW-w64.
Pengembang dan pengguna akhir harus menginstal runtime WebView2 di sistem mereka untuk versi Windows apa pun sebelum Windows 11.
Jika Anda adalah pengembang proyek ini, silakan buka bagian pengembangan.
Anda akan memiliki aplikasi yang berfungsi, namun Anda didorong untuk menjelajahi contoh yang tersedia.
Buat file berikut di direktori baru:
.gitignore
:
# Build artifacts
/build
CMakeLists.txt
:
cmake_minimum_required ( VERSION 3.16)
project (example LANGUAGES CXX)
set ( CMAKE_RUNTIME_OUTPUT_DIRECTORY " ${CMAKE_BINARY_DIR} /bin" )
set ( CMAKE_LIBRARY_OUTPUT_DIRECTORY " ${CMAKE_BINARY_DIR} /lib" )
set ( CMAKE_ARCHIVE_OUTPUT_DIRECTORY " ${CMAKE_BINARY_DIR} /lib" )
include (FetchContent)
FetchContent_Declare(
webview
GIT_REPOSITORY https://github.com/webview/webview
GIT_TAG 0.12.0)
FetchContent_MakeAvailable(webview)
add_executable (example WIN32 )
target_sources (example PRIVATE main.cc)
target_link_libraries (example PRIVATE webview::core)
main.cc
:
# include " webview/webview.h "
# include < iostream >
# ifdef _WIN32
int WINAPI WinMain (HINSTANCE /* hInst */ , HINSTANCE /* hPrevInst */ ,
LPSTR /* lpCmdLine */ , int /* nCmdShow */ ) {
# else
int main () {
#endif
try {
webview::webview w ( false , nullptr );
w. set_title ( " Basic Example " );
w. set_size ( 480 , 320 , WEBVIEW_HINT_NONE);
w. set_html ( " Thanks for using webview! " );
w. run ();
} catch ( const webview:: exception &e) {
std::cerr << e. what () << ' n ' ;
return 1 ;
}
return 0 ;
}
CMakeLists.txt
:
cmake_minimum_required ( VERSION 3.16)
project (example LANGUAGES C CXX)
set ( CMAKE_RUNTIME_OUTPUT_DIRECTORY " ${CMAKE_BINARY_DIR} /bin" )
set ( CMAKE_LIBRARY_OUTPUT_DIRECTORY " ${CMAKE_BINARY_DIR} /lib" )
set ( CMAKE_ARCHIVE_OUTPUT_DIRECTORY " ${CMAKE_BINARY_DIR} /lib" )
include (FetchContent)
FetchContent_Declare(
webview
GIT_REPOSITORY https://github.com/webview/webview
GIT_TAG 0.12.0)
FetchContent_MakeAvailable(webview)
add_executable (example WIN32 )
target_sources (example PRIVATE main.c)
target_link_libraries (example PRIVATE webview::core_static)
main.c
:
# include " webview/webview.h "
# include < stddef.h >
# ifdef _WIN32
# include < windows.h >
# endif
# ifdef _WIN32
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine,
int nCmdShow) {
( void )hInst;
( void )hPrevInst;
( void )lpCmdLine;
( void )nCmdShow;
# else
int main ( void ) {
#endif
webview_t w = webview_create ( 0 , NULL );
webview_set_title (w, " Basic Example " );
webview_set_size (w, 480 , 320 , WEBVIEW_HINT_NONE);
webview_set_html (w, " Thanks for using webview! " );
webview_run (w);
webview_destroy (w);
return 0 ;
}
Bangun proyek:
cmake -G Ninja -B build -S . -D CMAKE_BUILD_TYPE=Release
cmake --build build
Temukan executable di direktori build/bin
.
Pustaka gabungan dapat dibuat saat membangun proyek menggunakan CMake, atau skrip amalgamate.py
dapat dipanggil secara langsung.
Yang terakhir dijelaskan di bawah ini.
python3 scripts/amalgamate.py --output webview_amalgamation.h core/include/webview/webview.h
Lihat python3 scripts/amalgamate.py --help
untuk penggunaan skrip.
Berikut ini contoh untuk memanggil kompiler mirip GCC/Clang secara langsung. Gunakan file main.cc
dari contoh sebelumnya.
Tempatkan header webview.h
gabungan atau semua file individual ke dalam libs/webview
, dan WebView2.h
dari MS WebView2 ke dalam libs
.
Bangun proyek pada platform pilihan Anda.
c++ main.cc -O2 --std=c++11 -Ilibs -framework WebKit -ldl -o example
c++ main.cc -O2 --std=c++11 -Ilibs $(pkg-config --cflags --libs gtk+-3.0 webkit2gtk-4.1) -ldl -o example
c++ main.cc -O2 --std=c++14 -static -mwindows -Ilibs -ladvapi32 -lole32 -lshell32 -lshlwapi -luser32 -lversion -o example
Target CMake berikut tersedia:
Nama | Keterangan |
---|---|
webview::core | Header untuk C++. |
webview::core_shared | Perpustakaan bersama untuk C. |
webview::core_static | Perpustakaan statis untuk C. |
Target khusus untuk pemeriksaan berdasarkan permintaan dan tugas terkait:
Nama | Keterangan |
---|---|
webview_format_check | Periksa file dengan format clang. |
webview_reformat | Format ulang file dengan format dentang. |
Opsi boolean berikut dapat digunakan saat membuat proyek tampilan web mandiri atau saat membangunnya sebagai bagian dari proyek Anda (misalnya dengan FetchContent).
Pilihan | Keterangan |
---|---|
WEBVIEW_BUILD | Aktifkan bangunan |
WEBVIEW_BUILD_AMALGAMATION | Bangun perpustakaan gabungan |
WEBVIEW_BUILD_DOCS | Bangun dokumentasi |
WEBVIEW_BUILD_EXAMPLES | Bangun contoh |
WEBVIEW_BUILD_SHARED_LIBRARY | Bangun perpustakaan bersama |
WEBVIEW_BUILD_STATIC_LIBRARY | Bangun perpustakaan statis |
WEBVIEW_BUILD_TESTS | Membangun tes |
WEBVIEW_ENABLE_CHECKS | Aktifkan pemeriksaan |
WEBVIEW_ENABLE_CLANG_FORMAT | Aktifkan format dentang |
WEBVIEW_ENABLE_CLANG_TIDY | Aktifkan clang-tidy |
WEBVIEW_ENABLE_PACKAGING | Aktifkan pengemasan |
WEBVIEW_INSTALL_DOCS | Instal dokumentasi |
WEBVIEW_INSTALL_TARGETS | Pasang target |
WEBVIEW_IS_CI | Diinisialisasi oleh variabel lingkungan CI |
WEBVIEW_PACKAGE_AMALGAMATION | Paket perpustakaan gabungan |
WEBVIEW_PACKAGE_DOCS | Dokumentasi paket |
WEBVIEW_PACKAGE_HEADERS | Header paket |
WEBVIEW_PACKAGE_LIB | Paket perpustakaan yang dikompilasi |
WEBVIEW_STRICT_CHECKS | Lakukan pemeriksaan dengan ketat |
WEBVIEW_STRICT_CLANG_FORMAT | Jadikan pemeriksaan format dentang ketat |
WEBVIEW_STRICT_CLANG_TIDY | Lakukan pemeriksaan dentang-rapi dengan ketat |
WEBVIEW_USE_COMPAT_MINGW | Gunakan pembantu kompatibilitas untuk MinGW |
WEBVIEW_USE_STATIC_MSVC_RUNTIME | Gunakan perpustakaan runtime statis (MSVC) |
Catatan
Pemeriksaan diaktifkan secara default, namun tidak diterapkan secara default untuk pengembangan lokal (dikontrol oleh opsi WEBVIEW_IS_CI
).
Opsi non-boolean:
Pilihan | Keterangan |
---|---|
WEBVIEW_CLANG_FORMAT_EXE | Jalur clang-format yang dapat dieksekusi. |
WEBVIEW_CLANG_TIDY_EXE | Jalur executable clang-tidy . |
Opsi ini dapat digunakan saat menggunakan paket CMake tampilan web.
Pilihan | Keterangan |
---|---|
WEBVIEW_WEBKITGTK_API | WebKitGTK API untuk berinteraksi, misalnya 6.0 , 4.1 (disarankan) atau 4.0 . Ini juga akan secara otomatis menentukan versi GTK. Menggunakan API terbaru yang direkomendasikan secara default jika tersedia, atau API terbaru yang diketahui dan tersedia. Perlu diperhatikan bahwa terdapat perbedaan besar antar versi API yang dapat memengaruhi ketersediaan fitur. Lihat dokumentasi API tampilan web untuk detail tentang ketersediaan fitur. |
Pilihan | Keterangan |
---|---|
WEBVIEW_MSWEBVIEW2_VERSION | Versi MS WebView2, misalnya 1.0.1150.38 . |
WEBVIEW_USE_BUILTIN_MSWEBVIEW2 | Gunakan MS WebView2 bawaan. |
Opsi ini dapat ditentukan sebagai makro praprosesor untuk memodifikasi build, namun tidak diperlukan saat menggunakan CMake.
Nama | Keterangan |
---|---|
WEBVIEW_API | Mengontrol tautan C API, visibilitas simbol, dan apakah itu perpustakaan bersama. Secara default ini adalah inline untuk C++ dan extern untuk C. |
WEBVIEW_BUILD_SHARED | Memodifikasi WEBVIEW_API untuk membangun perpustakaan bersama. |
WEBVIEW_SHARED | Memodifikasi WEBVIEW_API untuk menggunakan perpustakaan bersama. |
WEBVIEW_STATIC | Memodifikasi WEBVIEW_API untuk membangun atau menggunakan perpustakaan statis. |
Nama | Keterangan |
---|---|
WEBVIEW_GTK | Kompilasi backend GTK/WebKitGTK. |
WEBVIEW_COCOA | Kompilasi backend Kakao/WebKit. |
WEBVIEW_EDGE | Kompilasi backend Win32/WebView2. |
Pilihan | Keterangan |
---|---|
WEBVIEW_MSWEBVIEW2_BUILTIN_IMPL | Mengaktifkan ( 1 ) atau menonaktifkan ( 0 ) implementasi bawaan pemuat WebView2. Mengaktifkan ini menghindari kebutuhan akan WebView2Loader.dll tetapi jika DLL ada maka DLL akan diprioritaskan. Opsi ini diaktifkan secara default. |
WEBVIEW_MSWEBVIEW2_EXPLICIT_LINK | Mengaktifkan ( 1 ) atau menonaktifkan ( 0 ) tautan eksplisit WebView2Loader.dll . Mengaktifkan ini menghindari kebutuhan untuk mengimpor perpustakaan ( *.lib ). Opsi ini diaktifkan secara default jika WEBVIEW_MSWEBVIEW2_BUILTIN_IMPL diaktifkan. |
Untuk membangun perpustakaan ini menggunakan MinGW-w64 di Windows maka perpustakaan tersebut harus mendukung C++14 dan memiliki Windows SDK terbaru.
Distribusi yang diketahui kompatibel:
Menautkan bagian pemuat WebView2 dari Microsoft WebView2 SDK bukanlah persyaratan yang sulit saat menggunakan pustaka tampilan web kami, begitu pula dengan mendistribusikan WebView2Loader.dll
dengan aplikasi Anda.
Namun, jika WebView2Loader.dll
dapat dimuat saat runtime, misalnya dari direktori executable, maka WebView2Loader.dll akan digunakan; jika tidak, implementasi minimalis kami akan digunakan.
Jika Anda ingin menggunakan pemuat resmi, ingatlah untuk mendistribusikannya bersama aplikasi Anda kecuali Anda menautkannya secara statis. Menautkannya secara statis dimungkinkan dengan Visual C++ tetapi tidak dengan MinGW-w64.
Berikut adalah beberapa perbedaan penting dalam penerapan loader kami dengan penerapan resmi:
WEBVIEW2_BROWSER_EXECUTABLE_FOLDER
.Opsi penyesuaian dapat digunakan untuk mengubah cara perpustakaan mengintegrasikan pemuat WebView2.
Proyek ini menggunakan sistem build CMake.
Selain dependensi yang disebutkan sebelumnya dalam dokumen ini untuk pengembangan dengan pustaka tampilan web, berikut ini digunakan selama pengembangan pustaka tampilan web.
clang-format
clang-tidy
cmake -G " Ninja Multi-Config " -B build -S .
cmake --build build --config CONFIG
Ganti CONFIG
dengan salah satu Debug
, Release
, atau Profile
. Gunakan Profile
untuk mengaktifkan cakupan kode (GCC/Clang).
Jalankan tes:
ctest --test-dir build --build-config CONFIG
Hasilkan laporan cakupan pengujian:
gcovr
Temukan laporan cakupan di build/coverage
.
Jalankan ini setelah membuat konfigurasi Debug
dan Release
proyek:
cd build
cpack -G External -C " Debug;Release " --config CPackConfig.cmake
Lihat file rantai alat CMake di direktori cmake/toolchains
.
Misalnya, ini menargetkan Windows x64 di Linux dengan thread POSIX:
cmake -G " Ninja Multi-Config " -B build -S . -D CMAKE_TOOLCHAIN_FILE=cmake/toolchains/x86_64-w64-mingw32.cmake -D WEBVIEW_TOOLCHAIN_EXECUTABLE_SUFFIX=-posix
cmake --build build --config CONFIG
Karena mesin browser bukan browser web lengkap, mesin ini mungkin tidak mendukung semua fitur yang Anda harapkan dari browser. Jika Anda menemukan bahwa suatu fitur tidak berfungsi seperti yang diharapkan, silakan berkonsultasi dengan dokumentasi mesin browser dan buka masalah jika menurut Anda perpustakaan harus mendukungnya.
Misalnya, perpustakaan tidak berupaya mendukung fitur interaksi pengguna seperti alert()
, confirm()
dan prompt()
serta fitur tidak penting lainnya seperti console.log()
.
Bahasa | Proyek |
---|---|
Ada | sampanye/tampilan web-ada |
Sanggul | tr1ckydev/webview-bun |
C# | tampilan web/tampilan web_csharp |
C3 | sampanye/tampilan web-c3 |
Kristal | naqvis/tampilan web |
D | sampanye/tampilan web-d, ronnie-w/tampilan web |
Deno | tampilan web/tampilan web_deno |
Pergi | tampilan web/tampilan web_go |
Pelabuhan | EricLendvai/Harbour_WebView |
Haskell | lettier/tampilan web |
Janet | janet-lang/tampilan web |
Jawa | tampilan web/tampilan web_java |
Kotlin | Winterreisender/webviewko |
Nim | oskca/tampilan web, neroist/tampilan web |
Node.js | Winterreisender/webview-nodejs |
Odin | sampanye/tampilan web-odin |
Pascal | PierceNg/fpwebview |
ular piton | congzhangzh/webview_python,zserge/webview-python |
PHP | 0 jam/php-tampilan web |
Rubi | Maaarcocr/webview_ruby |
Karat | Boscop/tampilan web |
Cepat | jakenvac/SwiftWebview |
V | malisipi/mui, ttytm/webview |
Zig | sampanye/tampilan web-zig |
Jika Anda ingin menambahkan pengikatan ke daftar, silakan kirimkan permintaan penarikan atau buka terbitan.
Anda dapat membuat sendiri binding untuk perpustakaan menggunakan antarmuka SWIG yang disertakan ( webview.i
).
Berikut beberapa contoh untuk membantu Anda memulai. Baris perintah gaya Unix digunakan untuk keringkasan.
mkdir -p build/bindings/{python,csharp,java,ruby}
swig -c++ -python -outdir build/bindings/python -o build/bindings/python/python_wrap.cpp webview.i
swig -c++ -csharp -outdir build/bindings/csharp -o build/bindings/csharp/csharp_wrap.cpp webview.i
swig -c++ -java -outdir build/bindings/java -o build/bindings/java/java_wrap.cpp webview.i
swig -c++ -ruby -outdir build/bindings/ruby -o build/bindings/ruby/ruby_wrap.cpp webview.i
Kode didistribusikan di bawah lisensi MIT, jangan ragu untuk menggunakannya dalam proyek milik Anda juga.