Skip to content
This repository was archived by the owner on Apr 5, 2022. It is now read-only.
/ webviewpp Public archive

🛰️ A cross-platform C++ webview library

License

Notifications You must be signed in to change notification settings

Soundux/webviewpp

Folders and files

NameName
Last commit message
Last commit date
Apr 23, 2021
Apr 23, 2021
May 23, 2021
Mar 5, 2021
Jun 25, 2021
Mar 22, 2021
Apr 22, 2021
Mar 6, 2021
Mar 31, 2021
Apr 4, 2022
Feb 15, 2021
Feb 26, 2022

Repository files navigation

Archived

This project has been superseded by saucer.


webviewpp

A cross-platform C++17 library that allows you to create a simple webview.

Compatibility

Platform Used Browser GUI
Windows Webview2 (Edge Chromium) WinAPI
Linux WebKit2GTK GTK

Supported Windows Versions

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

Usage

  • Add the library to your project
    • add_subdirectory(/path/to/webviewpp EXCLUDE_FROM_ALL)
      link_libraries(webview)
  • Use the library

Dependencies

  • Windows
    • (Runtime) Webview2 or Edge Chromium Canary Build
  • Linux
    • (Runtime & Build) webkit2gtk

Example

#include <webview.hpp>

int main()
{
  Webview::Window webview("webview", 800, 900);
  webview.expose(Webview::Function("addTen", [](int num) {
      return num + 10;
  }));

  webview.show();
  webview.run();
  return 0;
}

For more examples see examples

Embedding

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 embedded folder to your include directories
  • Change setUrl calls to
    • embedded:///<filepath> on Linux
    • file:///embedded/<filepath> on Windows

For an example see examples/embedded

Documentation

Window::hide

void hide();

Hides the window


Window::show

void show();

Shows the window


Window::isHidden

bool isHidden();

Returns:

Whether or the window is hidden


Window::setSize

void setSize(std::size_t, std::size_t);

Sets the window size


Window::getSize

std::pair<std::size_t, std::size_t> getSize();

Returns:

The width and height in form of an std::pair


Window::getTitle

std::string getTitle();

Returns:

The title of the window


Window::setTitle

void setTitle(std::string);

Sets the window title


Window::run

void run();

Runs the mainloop

Remarks:

Is blocking


Window::exit

void exit();

Closes the webview


Window::getUrl

std::string getUrl();

Returns:

The current url


Window::setUrl

void setUrl(std::string);

Navigates to the given url


Window::enableContextMenu

void enableContextMenu(bool);

Enables the context menu


Window::enableDevTools

void enableDevTools(bool);

Enables the developer tools


Window::expose

void expose(Webview::Function const&);

Exposes the given function

Remarks:

If the given Function is an AsyncFunction it will be run in a new thread


Window::callFunction

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

T must 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


Window::runCode

void runCode(std::string const&);

Runs the given javascript code


Window::injectCode

void injectCode(std::string const&);

Makes the given javascript code run on document load


Window::setCloseCallback

void setCloseCallback(std::function<bool ()>);

Sets the close-callback to the given callback

Remarks:

If the callback returns true the webview will not close


Window::setNavigateCallback

void setNavigateCallback(std::function<void (const std::string &)>);

Sets the navigate-callback to the given callback


Window::setResizeCallback

void setResizeCallback(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