Небольшая кроссплатформенная библиотека веб-просмотра для C/C++ для создания современных кроссплатформенных графических интерфейсов.
Цель проекта — создать общий уровень абстракции пользовательского интерфейса HTML5 для наиболее широко используемых платформ.
Он поддерживает двусторонние привязки JavaScript (для вызова JavaScript из C/C++ и вызова C/C++ из JavaScript).
Примечание
Языковая привязка для Go перемещена. Версии <= 0.1.1 доступны в этом репозитории.
Платформа | Технологии |
---|---|
Линукс | GTK, ВебКитGTK |
macOS | Какао, ВебКит |
Окна | 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
pkg-config
с --cflags
и --libs
, чтобы получить параметры компилятора/компоновщика для одного из этих наборов модулей: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, чтобы обойти защиту памяти W^X для вашего исполняемого файла. Пожалуйста, проверьте, работает ли это, не отключая сначала эту функцию безопасности.Ваш компилятор должен поддерживать C++14, и мы рекомендуем использовать его с актуальной версией Windows 10 SDK.
Для Visual C++ мы рекомендуем Visual Studio 2022 или более позднюю версию. При использовании MinGW-w64 существуют некоторые требования.
Разработчики и конечные пользователи должны установить в своей системе среду выполнения WebView2 для любой версии Windows до Windows 11.
Если вы разработчик этого проекта, перейдите в раздел разработки.
У вас будет работающее приложение, но вам рекомендуется изучить доступные примеры.
Создайте следующие файлы в новом каталоге:
.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
и WebView2.h
из MS WebView2 в 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. |
Следующие логические параметры можно использовать при создании автономного проекта веб-просмотра или при создании его как части вашего проекта (например, с помощью 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 | Сделать проверку 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 . |
Эти параметры можно использовать при использовании пакета CMake веб-просмотра.
Вариант | Описание |
---|---|
WEBVIEW_WEBKITGTK_API | WebKitGTK API для взаимодействия, например, 6.0 , 4.1 (рекомендуется) или 4.0 . Это также автоматически определит версию GTK. По умолчанию используется последний рекомендованный API, если он доступен, или последний известный и доступный API. Обратите внимание, что между версиями API могут быть серьезные различия, которые могут повлиять на доступность функций. Подробную информацию о доступности функций см. в документации по API веб-просмотра. |
Вариант | Описание |
---|---|
WEBVIEW_MSWEBVIEW2_VERSION | Версия MS WebView2, например 1.0.1150.38 . |
WEBVIEW_USE_BUILTIN_MSWEBVIEW2 | Используйте встроенный MS WebView2. |
Эти параметры можно указать как макросы препроцессора для изменения сборки, но они не нужны при использовании CMake.
Имя | Описание |
---|---|
WEBVIEW_API | Управляет связью C API, видимостью символов и тем, является ли это общей библиотекой. По умолчанию это inline для C++ и extern для C. |
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 | Включает ( 1 ) или отключает ( 0 ) встроенную реализацию загрузчика WebView2. Включение этого параметра позволяет избежать необходимости использования WebView2Loader.dll , но если DLL присутствует, она имеет приоритет. Эта опция включена по умолчанию. |
WEBVIEW_MSWEBVIEW2_EXPLICIT_LINK | Включает ( 1 ) или отключает ( 0 ) явное связывание WebView2Loader.dll . Включение этого параметра позволяет избежать необходимости импорта библиотек ( *.lib ). Этот параметр включен по умолчанию, если включен WEBVIEW_MSWEBVIEW2_BUILTIN_IMPL . |
Чтобы собрать эту библиотеку с использованием MinGW-w64 в Windows, она должна поддерживать C++14 и иметь актуальную версию Windows SDK.
Дистрибутивы, которые, как известно, совместимы:
Связывание части загрузчика WebView2 из Microsoft WebView2 SDK не является жестким требованием при использовании нашей библиотеки веб-просмотра, равно как и распространение WebView2Loader.dll
вместе с вашим приложением.
Однако если WebView2Loader.dll
загружается во время выполнения, например, из каталога исполняемого файла, то он будет использоваться; в противном случае вместо этого будет использоваться наша минималистичная реализация.
Если вы хотите использовать официальный загрузчик, не забудьте распространять его вместе с вашим приложением, если вы не связываете его статически. Статическое связывание возможно с помощью Visual C++, но не с MinGW-w64.
Вот некоторые примечательные отличия нашей реализации загрузчика от официальной реализации:
WEBVIEW2_BROWSER_EXECUTABLE_FOLDER
.Параметры настройки можно использовать для изменения способа интеграции библиотеки загрузчика WebView2.
В этом проекте используется система сборки CMake.
В дополнение к зависимостям, упомянутым ранее в этом документе для разработки с использованием библиотеки веб-просмотра, во время разработки библиотеки веб-просмотра используются следующие.
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 в каталоге cmake/toolchains
.
Например, это нацелено на Windows x64 в Linux с потоками 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
Поскольку движок браузера не является полноценным веб-браузером, он может не поддерживать все функции, которые вы можете ожидать от браузера. Если вы обнаружите, что какая-то функция не работает должным образом, обратитесь к документации движка браузера и откройте проблему, если вы считаете, что библиотека должна ее поддерживать.
Например, библиотека не пытается поддерживать функции взаимодействия с пользователем, такие как alert()
, confirm()
и prompt()
, а также другие несущественные функции, такие как console.log()
.
Язык | Проект |
---|---|
Ада | шампанское/webview-ada |
булочка | tr1ckydev/webview-bun |
С# | веб-просмотр/webview_csharp |
С3 | шампанское/webview-c3 |
Кристалл | Наквис/веб-просмотр |
Д | thechampagne/webview-d, ronnie-w/webviewd |
Дено | веб-просмотр/webview_deno |
Идти | веб-просмотр/webview_go |
Гавань | ЭрикЛендвай/Harbour_WebView |
Хаскелл | Леттье/webviewhs |
Джанет | Джанет-Ланг/WebView |
Ява | веб-просмотр/webview_java |
Котлин | Winterreisender/webviewko |
Ним | oskca/webview, нероист/webview |
Node.js | Winterreisender/webview-nodejs |
Один | шампанское/webview-один |
Паскаль | Пирсеннг/fpwebview |
Питон | congzhangzh/webview_python, zserge/webview-python |
PHP | 0hr/php-webview |
Руби | Maaarcocr/webview_ruby |
Ржавчина | Boscop/веб-просмотр |
Быстрый | Якенвак/SwiftWebview |
В | малисипи/муи, ttytm/webview |
Зиг | шампанское/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, поэтому вы также можете свободно использовать его в своих собственных проектах.