Skip to content

用于 C/C 的小型跨平台 Webview 库。使用 WebKit (GTK/Cocoa) 和 Edge WebView2 (Windows)。

License

Notifications You must be signed in to change notification settings

yuanzhongqiao/webview

 
 

Repository files navigation

网页视图

不和谐 构建状态

一个用于 C/C 的小型跨平台 Webview 库,用于构建现代跨平台 GUI。

该项目的目标是为最广泛使用的平台创建一个通用的 HTML5 UI 抽象层。

它支持双向 JavaScript 绑定(从 C/C 调用 JavaScript 和从 JavaScript 调用 C/C )。

笔记

Go 的语言绑定已发生变化存储库中提供 <= 0.1.1 的版本。

平台支持

平台 技术
Linux GTK 3 , WebKitGTK
苹果系统 可可、WebKit
视窗 Windows API , WebView2

文档

最新的文档就在源代码中。改进文档是一项持续的工作,我们非常欢迎您做出贡献。

先决条件

除了需要更现代版本的平台之外,您的编译器必须至少支持 C 11。

Linux 和 BSD

开发和分发需要GTK和WebKit2GTK库。您需要检查您的软件包存储库以了解如何安装这些软件包。

基于 Debian 的系统:

  • 套餐:
    • 发展:apt install libgtk-3-dev libwebkit2gtk-4.0-dev
    • 生产:apt install libgtk-3-0 libwebkit2gtk-4.0-37

基于 Fedora 的系统:

  • 套餐:
    • 发展:dnf install gtk3-devel webkit2gtk4.0-devel
    • 生产:dnf install gtk3 webkit2gtk4.0

基于 BSD 的系统:

  • FreeBSD 软件包:pkg install webkit2-gtk3
  • 在基于 BSD 的系统上执行可能需要将wxallowed选项(请参阅mount(8))添加到 fstab 中,以绕过可执行文件的W^X内存保护。请先看看在不禁用此安全功能的情况下它是否有效。

视窗

您的编译器必须支持 C 14,我们建议将其与最新的 Windows 10 SDK 配对。

对于 Visual C ,我们建议使用 Visual Studio 2022 或更高版本。我们为 MinGW-w64 有一个单独的部分

对于 Windows 11 之前的任何 Windows 版本,开发人员和最终用户必须在其系统上安装WebView2 运行时。

入门

如果您是该项目的开发人员,请转到开发部分

这里的说明是在使用 Unix 风格的命令行编译 C/C 代码时为 GCC 编写的,并假设多个命令在同一个 shell 会话中执行。Windows 的命令行使用特定于 Command shell 的语法,但只要相应地调整命令,您就可以使用任何 shell,例如 PowerShell。在 Windows 上构建时请参阅MinGW-w64 要求

您将拥有一个可以运行的应用程序,但我们鼓励您探索可用的示例并尝试超越单纯基础知识的示例。

首先为您的项目创建一个新的目录结构:

mkdir my-project && cd my-project
mkdir build libs "libs/webview"

Windows 准备

编译程序时需要WebView2 SDK :

mkdir libs\webview2
curl -sSL "https://www.nuget.org/api/v2/package/Microsoft.Web.WebView2" | tar -xf - -C libs\webview2

如果您想使用官方 WebView2 加载器 ( WebView2Loader.dll),请获取 DLL 的副本(替换x64为您的目标架构):

copy /Y libs\webview2\build\native\x64\WebView2Loader.dll build

注意:有关更多选项,请参阅WebView2 加载程序部分。

C/C 准备

获取webview库:

curl -sSLo "libs/webview/webview.h" "https://raw.githubusercontent.com/webview/webview/master/webview.h"
curl -sSLo "libs/webview/webview.cc" "https://raw.githubusercontent.com/webview/webview/master/webview.cc"

C 入门

将基本 C 示例保存到您的项目目录中:

curl -sSLo basic.cc "https://raw.githubusercontent.com/webview/webview/master/examples/basic.cc"

构建并运行示例:

# Linux
g   basic.cc -std=c  11 -Ilibs/webview $(pkg-config --cflags --libs gtk -3.0 webkit2gtk-4.0) -o build/basic && ./build/basic
# macOS
g   basic.cc -std=c  11 -Ilibs/webview -framework WebKit -o build/basic && ./build/basic
# Windows/MinGW
g   basic.cc -std=c  14 -mwindows -Ilibs/webview -Ilibs/webview2/build/native/include -ladvapi32 -lole32 -lshell32 -lshlwapi -luser32 -lversion -o build/basic.exe && "build/basic.exe"

Visual C 奖励

构建一个 C 示例:

cl basic.cc /std:c  14 /EHsc /Fobuild\ ^
    /I libs\webview ^
    /I libs\webview2\build\native\include ^
    /link /OUT:build\basic.exe

C 入门

将基本 C 示例保存到您的项目目录中:

curl -sSLo basic.c "https://raw.githubusercontent.com/webview/webview/master/examples/basic.c"

构建库和示例,然后运行它:

# Linux
g   -c libs/webview/webview.cc -std=c  11 -DWEBVIEW_STATIC $(pkg-config --cflags gtk -3.0 webkit2gtk-4.0) -o build/webview.o
gcc -c basic.c -std=c99 -Ilibs/webview -o build/basic.o
g   build/basic.o build/webview.o $(pkg-config --libs gtk -3.0 webkit2gtk-4.0) -o build/basic && build/basic
# macOS
g   -c libs/webview/webview.cc -std=c  11 -DWEBVIEW_STATIC -o build/webview.o
gcc -c basic.c -std=c99 -Ilibs/webview -o build/basic.o
g   build/basic.o build/webview.o -framework WebKit -o build/basic && build/basic
# Windows/MinGW
g   -c libs/webview/webview.cc -std=c  14 -DWEBVIEW_STATIC -Ilibs/webview2/build/native/include -o build/webview.o
gcc -c basic.c -std=c99 -Ilibs/webview -o build/basic.o
g   build/basic.o build/webview.o -mwindows -ladvapi32 -lole32 -lshell32 -lshlwapi -luser32 -lversion -o build/basic.exe && "build/basic.exe"

Visual C 奖励

构建共享库:

cl libs\webview\webview.cc /std:c  14 /EHsc /Fobuild\ ^
    /D WEBVIEW_BUILD_SHARED ^
    /I libs\webview ^
    /I libs\webview2\build\native\include ^
    /link /DLL /OUT:build\webview.dll

使用共享库构建一个 C 示例:

cl basic.c build\webview.lib /EHsc /Fobuild\ ^
    /D WEBVIEW_SHARED ^
    /I libs\webview ^
    /link /OUT:build\basic.exe

更多示例

此处显示的示例只是更大图片的一部分,因此我们鼓励您尝试其他示例并自行探索 - 您可以遵循相同的过程。如果您发现任何问题,请与我们联系

编译时选项

C API联动

姓名 描述
WEBVIEW_API 控制 C API 链接、符号可见性以及是否是共享库。默认情况下,这inline适用于 C 和externC。
WEBVIEW_BUILD_SHARED 修改WEBVIEW_API以构建共享库。
WEBVIEW_SHARED 修改WEBVIEW_API为使用共享库。
WEBVIEW_STATIC 修改WEBVIEW_API以构建或使用静态库。

应用程序分发

您的应用程序的分发超出了该库的范围,但我们可以为您提供一些探索的指导。

macOS 应用程序包

在 macOS 上,您通常会为您的应用程序创建一个包含图标和适当元数据的捆绑包。

简约的捆绑包通常具有以下目录结构:

example.app                 bundle
└── Contents
    ├── Info.plist          information property list
    ├── MacOS
    |   └── example         executable
    └── Resources
        └── example.icns    icon

在 Apple 开发者网站上了解有关捆绑包结构的更多信息。

提示:该png2icns工具可以从 PNG 文件创建 icns 文件。请参阅icnsutils基于 Debian 的系统的软件包。

Windows 应用程序

您通常会创建一个资源脚本文件 ( *.rc),其中包含有关应用程序的信息以及图标。由于您应该随时可用 MinGW-w64,因此您可以使用编译该文件windres并将其链接到您的程序中。如果您使用 Visual C ,那么请查看Windows 资源编译器

目录结构可能如下所示:

my-project/
├── icons/
|   ├── application.ico
|   └── window.ico
├── basic.cc
└── resources.rc

resources.rc:

100 ICON "icons\\application.ico"
32512 ICON "icons\\window.ico"

注意:窗口使用的图标资源ID必须为32512( IDI_APPLICATION)。

编译:

windres -o build/resources.o resources.rc
g   basic.cc build/resources.o [...]

请记住捆绑未静态链接的 DLL,例如来自 MinGW-w64 的 DLL 以及可选的WebView2Loader.dll.

MinGW-w64 要求

为了在 Windows 上使用 MinGW-w64 构建此库,它必须支持 C 14 并具有最新的 Windows SDK。

已知兼容的发行版:

MS WebView2 加载器

使用我们的 webview 库时,链接 Microsoft WebView2 SDK 的 WebView2 加载器部分并不是硬性要求,也不是WebView2Loader.dll与您的应用程序一起分发。

然而,如果WebView2Loader.dll可以在运行时加载,例如从可执行文件的目录,那么它将被使用;否则将使用我们的简约实现。

如果您希望使用官方加载程序,请记住将其与您的应用程序一起分发,除非您静态链接它。Visual C 可以静态链接它,但 MinGW-w64 不行。

以下是我们的加载器实现与官方实现的一些值得注意的不同之处:

  • 不支持使用环境变量(例如WEBVIEW2_BROWSER_EXECUTABLE_FOLDER.
  • 不支持 Microsoft Edge Insider(预览)频道。

以下编译时选项可用于更改库集成 WebView2 加载程序的方式:

  • WEBVIEW_MSWEBVIEW2_BUILTIN_IMPL=<1|0>- 启用或禁用 WebView2 加载器的内置实现。启用此功能可以避免需要,WebView2Loader.dll但如果 DLL 存在,则 DLL 优先。默认情况下启用此选项。
  • WEBVIEW_MSWEBVIEW2_EXPLICIT_LINK=<1|0>- 启用或禁用WebView2Loader.dll. 启用此功能可以避免导入库 ( ) 的需要*.lib。如果启用此选项,则默认WEBVIEW_MSWEBVIEW2_BUILTIN_IMPL启用。

发展

要构建库、示例并运行测试,请使用script目录中的构建脚本之一:

  • build.sh:

    • 在基于 Unix 的系统上。
    • 在 Windows 上的类 Unix 环境(例如 MSYS2)上。
  • build.bat:

    • 在 Windows 上使用 Visual C 构建时。

您可以在命令行上为这些脚本指定单独的任务:

任务 描述
info 显示信息。
clean 清理构建目录。
format 重新格式化代码。
deps 获取依赖项。
check 运行检查。
build 构建库、示例和测试。
test 运行测试。

此外,脚本接受以下环境变量。

两个脚本:

多变的 描述
CI 更改 CI 环境中的行为(更严格)。
TARGET_ARCH 交叉编译的目标架构 ( x64, x86)。
BUILD_DIR 覆盖构建目录的路径。

仅有的build.sh

多变的 描述
HOST_OS 主机操作系统 ( linux, macos, windows)。
TARGET_OS 用于交叉编译的目标操作系统(请参阅 参考资料HOST_OS)。
CC C编译器可执行。
CXX C 编译器可执行文件。
LIB_PREFIX 库名称前缀。
PKGCONFIG 替代pkgconfig可执行文件。

交叉编译

请参阅 CI 配置示例。

局限性

浏览器功能

由于浏览器引擎不是一个完整的网络浏览器,它可能不支持您期望浏览器提供的所有功能。如果您发现某个功能未按预期工作,请查阅浏览器引擎的文档,并在您认为该库应该支持该功能时提出问题。

例如,该库不会尝试支持用户交互功能,例如alert()confirm()prompt()以及其他非必要功能,例如console.log().

绑定

语言 项目
包子 tr1ckydev/webview-bun
C# 网页视图/webview_csharp
C3 香槟/webview-c3
水晶 纳克维斯/网页视图
D 香槟/webview-d
德诺 网页视图/webview_deno
网页视图/webview_go
港口 EricLendvai/Harbour_WebView
哈斯克尔 莱蒂尔/webviewhs
珍妮特 珍妮特·朗/webview
爪哇 webview/webview_java
科特林 Winterreisender/webviewko
尼姆 oskca/webview , neroist/webview
Node.js Winterreisender/webview-nodejs
奥丁 thechampagne/webview-odin
帕斯卡 PierceNg/fpwebview
Python zserge/webview-python
PHP 0小时/php-webview
红宝石 Maaarcocr/webview_ruby
Boscop/网络视图
迅速 jakenvac/SwiftWebview
V malisipi/mui , 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 许可下分发的,也可以在您的专有项目中随意使用它。

About

用于 C/C 的小型跨平台 Webview 库。使用 WebKit (GTK/Cocoa) 和 Edge WebView2 (Windows)。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 77.5%
  • C 11.6%
  • Shell 6.0%
  • Batchfile 4.2%
  • SWIG 0.7%