This project has been superseded by saucer.
A cross-platform C++17 library that allows you to create a simple webview.
| Platform | Used Browser | GUI |
|---|---|---|
| Windows | Webview2 (Edge Chromium) | WinAPI |
| Linux | WebKit2GTK | GTK |
| Version | Remarks |
|---|---|
| 11 | Will not require Webview2 Runtime or Canary-Edge build |
| 10 | Explicit installation of the Webview2 Runtime may be required |
| 8 | Requires WINDOWS_8 to be set to ON from your CMakeLists |
- Add the library to your project
add_subdirectory(/path/to/webviewpp EXCLUDE_FROM_ALL) link_libraries(webview)
- Use the library
- See documentation
- See
examplesfor examples
- Windows
- (Runtime) Webview2 or Edge Chromium Canary Build
- Linux
- (Runtime & Build) webkit2gtk
#include<webview.hpp>intmain(){Webview::Window webview("webview", 800, 900); webview.expose(Webview::Function("addTen", [](int num){return num + 10})); webview.show(); webview.run(); return0}For more examples see examples
webviewpp supports embedding of all required files.
To embed your files you have to use the embed-helper.
Usage:
- Compile the embed-helper
mkdir build &&cd build && cmake .. && cmake --build . --config Release
- Run the embed-helper
./embed_helper <path to folder containing all the required files>
- Add the parent folder of the
embeddedfolder to your include directories - Change
setUrlcalls toembedded:///<filepath>on Linuxfile:///embedded/<filepath>on Windows
For an example see examples/embedded
voidhide();Hides the window
voidshow();Shows the window
Window::isHidden
boolisHidden();Returns:
Whether or the window is hidden
voidsetSize(std::size_t, std::size_t);Sets the window size
std::pair<std::size_t, std::size_t> getSize();Returns:
The width and height in form of an
std::pair
std::string getTitle();Returns:
The title of the window
voidsetTitle(std::string);Sets the window title
voidrun();Runs the mainloop
Remarks:
Is blocking
voidexit();Closes the webview
std::string getUrl();Returns:
The current url
voidsetUrl(std::string);Navigates to the given url
voidenableContextMenu(bool);Enables the context menu
voidenableDevTools(bool);Enables the developer tools
voidexpose(Webview::Function const&);Exposes the given function
Remarks:
If the given Function is an
AsyncFunctionit will be run in a new thread
template <typename T> std::future<T> callFunction(Webview::JavaScriptFunction&& function);Calls the given javascript function
Returns:
The result of the javascript function call as
T
Preconditions
Tmust be serializable by nlohmann::json
Remarks:
You should never call
.get()on the returned future in a non async context as it will freeze the webview
voidrunCode(std::string const&);Runs the given javascript code
voidinjectCode(std::string const&);Makes the given javascript code run on document load
voidsetCloseCallback(std::function<bool ()>);Sets the close-callback to the given callback
Remarks:
If the callback returns
truethe webview will not close
voidsetNavigateCallback(std::function<void (const std::string &)>);Sets the navigate-callback to the given callback
voidsetResizeCallback(std::function<void (std::size_t, std::size_t)>);Sets the resize-callback to the given callback
This work was originally based on the work of MichaelKim