最新のクロスプラットフォーム GUI を構築するための C/C++ 用の小さなクロスプラットフォーム Webview ライブラリ。
プロジェクトの目標は、最も広く使用されているプラットフォーム向けに共通の HTML5 UI 抽象化レイヤーを作成することです。
双方向の JavaScript バインディング (C/C++ から JavaScript を呼び出し、JavaScript から C/C++ を呼び出す) をサポートします。
注記
Go の言語バインディングが移動されました。このリポジトリでは、バージョン 0.1.1 以下が利用可能です。
プラットフォーム | テクノロジー |
---|---|
Linux | GTK、WebKitGTK |
macOS | ココア、WebKit |
窓 | Windows API、WebView2 |
最新のドキュメントはソース コード内にあります。ドキュメントの改善は継続的な取り組みであり、皆様のご協力をお待ちしております。
コンパイラは、より新しいバージョンを必要とするプラットフォームを除き、最低限の C++11 をサポートする必要があります。
このプロジェクトでは CMake と Ninja を使用します。便宜上これらのツールが推奨されていますが、ライブラリの使用にはこれらのツールは必須ではありません。
開発と配布には GTK ライブラリと WebKitGTK ライブラリが必要です。どのパッケージをインストールするかについては、パッケージ リポジトリを確認する必要があります。
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
--cflags
および--libs
を指定してpkg-config
使用して、次のいずれかのモジュール セットのコンパイラ/リンカー オプションを取得します。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
オプション (mount(8) を参照) を fstab に追加する必要がある場合があります。まずこのセキュリティ機能を無効にせずに動作するかどうかを確認してください。コンパイラーは C++14 をサポートする必要があり、最新の Windows 10 SDK と組み合わせることが推奨されます。
Visual C++ の場合は、Visual Studio 2022 以降を推奨します。 MinGW-w64 を使用する場合は、いくつかの要件があります。
開発者とエンドユーザーは、Windows 11 より前のバージョンの Windows のシステムに WebView2 ランタイムをインストールする必要があります。
このプロジェクトの開発者の方は、開発セクションに進んでください。
動作するアプリが完成しましたが、利用可能なサンプルを探索することをお勧めします。
新しいディレクトリに次のファイルを作成します。
.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 ;
}
プロジェクトをビルドします。
cmake -G Ninja -B build -S . -D CMAKE_BUILD_TYPE=Release
cmake --build build
build/bin
ディレクトリで実行可能ファイルを見つけます。
統合されたライブラリは、CMake を使用してプロジェクトをビルドするときにビルドすることも、 amalgamate.py
スクリプトを直接呼び出すこともできます。
後者については以下で説明します。
python3 scripts/amalgamate.py --output webview_amalgamation.h core/include/webview/webview.h
スクリプトの使用法については、 python3 scripts/amalgamate.py --help
を参照してください。
GCC/Clang に似たコンパイラを直接呼び出す例を次に示します。前の例のmain.cc
ファイルを使用します。
統合されたwebview.h
ヘッダーまたはすべての個別ファイルをlibs/webview
に配置し、MS WebView2 のWebView2.h
libs
に配置します。
選択したプラットフォームでプロジェクトをビルドします。
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
次の CMake ターゲットが利用可能です。
名前 | 説明 |
---|---|
webview::core | C++ 用のヘッダー。 |
webview::core_shared | C 用の共有ライブラリ。 |
webview::core_static | C 用の静的ライブラリ。 |
オンデマンド チェックおよび関連タスクの特別なターゲット:
名前 | 説明 |
---|---|
webview_format_check | Clang形式でファイルをチェックしてください。 |
webview_reformat | ファイルを Clang 形式で再フォーマットします。 |
次のブール型オプションは、WebView プロジェクトをスタンドアロンで構築する場合、またはプロジェクトの一部として (FetchContent などを使用して) 構築する場合に使用できます。
オプション | 説明 |
---|---|
WEBVIEW_BUILD | 構築を有効にする |
WEBVIEW_BUILD_AMALGAMATION | 統合されたライブラリを構築する |
WEBVIEW_BUILD_DOCS | ビルドドキュメント |
WEBVIEW_BUILD_EXAMPLES | 構築例 |
WEBVIEW_BUILD_SHARED_LIBRARY | 共有ライブラリを構築する |
WEBVIEW_BUILD_STATIC_LIBRARY | 静的ライブラリを構築する |
WEBVIEW_BUILD_TESTS | ビルドテスト |
WEBVIEW_ENABLE_CHECKS | チェックを有効にする |
WEBVIEW_ENABLE_CLANG_FORMAT | Clang フォーマットを有効にする |
WEBVIEW_ENABLE_CLANG_TIDY | Clang-Tidy を有効にする |
WEBVIEW_ENABLE_PACKAGING | パッケージ化を有効にする |
WEBVIEW_INSTALL_DOCS | インストールドキュメント |
WEBVIEW_INSTALL_TARGETS | インストールターゲット |
WEBVIEW_IS_CI | CI 環境変数によって初期化されます |
WEBVIEW_PACKAGE_AMALGAMATION | パッケージ統合ライブラリ |
WEBVIEW_PACKAGE_DOCS | パッケージのドキュメント |
WEBVIEW_PACKAGE_HEADERS | パッケージヘッダー |
WEBVIEW_PACKAGE_LIB | コンパイルされたライブラリをパッケージ化する |
WEBVIEW_STRICT_CHECKS | チェックを厳しくする |
WEBVIEW_STRICT_CLANG_FORMAT | Clang形式チェックを厳密にする |
WEBVIEW_STRICT_CLANG_TIDY | ガタガタチェックを厳しくする |
WEBVIEW_USE_COMPAT_MINGW | MinGW の互換性ヘルパーを使用する |
WEBVIEW_USE_STATIC_MSVC_RUNTIME | 静的ランタイム ライブラリ (MSVC) を使用する |
注記
チェックはデフォルトで有効になっていますが、ローカル開発ではデフォルトでは強制されません ( WEBVIEW_IS_CI
オプションによって制御されます)。
非ブール値オプション:
オプション | 説明 |
---|---|
WEBVIEW_CLANG_FORMAT_EXE | clang-format 実行可能ファイルのパス。 |
WEBVIEW_CLANG_TIDY_EXE | clang-tidy 実行可能ファイルのパス。 |
これらのオプションは、Webview CMake パッケージを使用するときに使用できます。
オプション | 説明 |
---|---|
WEBVIEW_WEBKITGTK_API | WebKitGTK API とインターフェイスします。たとえば、 6.0 、 4.1 (推奨) または4.0 です。これにより、GTK バージョンも自動的に決定されます。最新の推奨 API (利用可能な場合)、または最新の既知の利用可能な API を使用します。 API バージョン間には大きな違いがあり、機能の可用性に影響を与える可能性があることに注意してください。利用可能な機能の詳細については、Webview API ドキュメントを参照してください。 |
オプション | 説明 |
---|---|
WEBVIEW_MSWEBVIEW2_VERSION | MS WebView2 バージョン (例: 1.0.1150.38 )。 |
WEBVIEW_USE_BUILTIN_MSWEBVIEW2 | 組み込みの MS WebView2 を使用します。 |
これらのオプションは、ビルドを変更するためのプリプロセッサ マクロとして指定できますが、CMake を使用する場合は必要ありません。
名前 | 説明 |
---|---|
WEBVIEW_API | C API リンケージ、シンボルの可視性、共有ライブラリかどうかを制御します。デフォルトでは、これは C++ の場合はinline 、C の場合はextern です。 |
WEBVIEW_BUILD_SHARED | 共有ライブラリを構築するためにWEBVIEW_API 変更します。 |
WEBVIEW_SHARED | 共有ライブラリを使用するためにWEBVIEW_API 変更します。 |
WEBVIEW_STATIC | 静的ライブラリを構築または使用するためにWEBVIEW_API 変更します。 |
名前 | 説明 |
---|---|
WEBVIEW_GTK | GTK/WebKitGTK バックエンドをコンパイルします。 |
WEBVIEW_COCOA | Cocoa/WebKit バックエンドをコンパイルします。 |
WEBVIEW_EDGE | Win32/WebView2 バックエンドをコンパイルします。 |
オプション | 説明 |
---|---|
WEBVIEW_MSWEBVIEW2_BUILTIN_IMPL | WebView2 ローダーの組み込み実装を有効 ( 1 ) または無効 ( 0 ) にします。これを有効にするとWebView2Loader.dll は必要なくなりますが、DLL が存在する場合は DLL が優先されます。このオプションはデフォルトで有効になっています。 |
WEBVIEW_MSWEBVIEW2_EXPLICIT_LINK | WebView2Loader.dll の明示的なリンクを有効 ( 1 ) または無効 ( 0 ) にします。これを有効にすると、インポート ライブラリ ( *.lib ) が不要になります。 WEBVIEW_MSWEBVIEW2_BUILTIN_IMPL が有効な場合、このオプションはデフォルトで有効になります。 |
Windows 上で MinGW-w64 を使用してこのライブラリを構築するには、C++14 をサポートし、最新の Windows SDK が必要です。
互換性があることが知られているディストリビューション:
WebView ライブラリを使用する場合、Microsoft WebView2 SDK の WebView2 ローダー部分をリンクすることは難しい要件ではありません。また、アプリにWebView2Loader.dll
配布することも必要ありません。
ただし、 WebView2Loader.dll
実行時に (実行可能ファイルのディレクトリなどから) ロード可能な場合は、それが使用されます。それ以外の場合は、最小限の実装が代わりに使用されます。
公式ローダーを使用したい場合は、静的にリンクしない限り、忘れずにアプリと一緒に配布してください。 Visual C++ では静的にリンクできますが、MinGW-w64 ではできません。
ここでは、ローダーの実装が公式の実装と異なる注目すべき点をいくつか示します。
WEBVIEW2_BROWSER_EXECUTABLE_FOLDER
などの環境変数を使用した WebView2 の構成はサポートされていません。カスタマイズ オプションを使用して、ライブラリが WebView2 ローダーを統合する方法を変更できます。
このプロジェクトでは CMake ビルド システムを使用します。
このドキュメントで前述した、WebView ライブラリを使用した開発に関する依存関係に加えて、WebView ライブラリの開発中に次の依存関係が使用されます。
clang-format
clang-tidy
cmake -G " Ninja Multi-Config " -B build -S .
cmake --build build --config CONFIG
CONFIG
Debug
、 Release
、またはProfile
のいずれかに置き換えます。 Profile
使用してコード カバレッジ (GCC/Clang) を有効にします。
テストを実行します。
ctest --test-dir build --build-config CONFIG
テストカバレッジレポートを生成します。
gcovr
build/coverage
でカバレッジ レポートを見つけます。
プロジェクトのDebug
構成とRelease
構成をビルドした後、これを実行します。
cd build
cpack -G External -C " Debug;Release " --config CPackConfig.cmake
cmake/toolchains
ディレクトリ内の CMake ツールチェーン ファイルを参照してください。
たとえば、これは POSIX スレッドを備えた Linux 上の Windows x64 をターゲットとしています。
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
ブラウザ エンジンは完全な Web ブラウザではないため、ブラウザに期待されるすべての機能をサポートしているとは限りません。機能が期待どおりに動作しないことがわかった場合は、ブラウザ エンジンのドキュメントを参照し、ライブラリでその機能をサポートする必要があると思われる場合は問題を提起してください。
たとえば、ライブラリは、 alert()
、 confirm()
、 prompt()
などのユーザー対話機能や、 console.log()
などのその他の必須ではない機能をサポートしようとしません。
言語 | プロジェクト |
---|---|
エイダ | thechampagne/webview-ada |
バン | tr1ckydev/webview-bun |
C# | webview/webview_csharp |
C3 | thechampagne/webview-c3 |
結晶 | naqvis/webview |
D | thechampagne/webview-d、ronnie-w/webviewd |
デノ | webview/webview_deno |
行く | webview/webview_go |
港 | エリック・レンドヴァイ/Harbour_WebView |
ハスケル | レター/ウェブビュー |
ジャネット | ジャネットラング/ウェブビュー |
ジャワ | webview/webview_java |
コトリン | Winterreisender/webviewko |
ニム | oskca/webview、neroist/webview |
Node.js | Winterreisender/webview-nodejs |
オーディン | thechampagne/webview-odin |
パスカル | PierceNg/fpwebview |
パイソン | congzhangzh/webview_python,zserge/webview-python |
PHP | 0時間/php-webview |
ルビー | Maaarcocr/webview_ruby |
さび | ボスコップ/ウェブビュー |
迅速 | jakenvac/SwiftWebview |
V | malisipi/mui、ttytm/webview |
ジグ | thechampagne/webview-zig |
リストにバインディングを追加したい場合は、お気軽にプル リクエストを送信するか、問題をオープンしてください。
付属の SWIG インターフェイス ( webview.i
) を使用して、ライブラリのバインディングを自分で生成できます。
以下にいくつかの例を示します。簡潔にするために Unix スタイルのコマンド ラインが使用されます。
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
コードは MIT ライセンスに基づいて配布されているため、独自のプロジェクトでも自由に使用できます。