Giter Club home page Giter Club logo

webview's Introduction

webview

Build Status Build status GoDoc Go Report Card

A tiny cross-platform webview library for C/C++/Golang.

It uses Cocoa/WebKit on macOS, gtk-webkit on Linux and good old MSHTML on Windows.

linux

API

WebView library prrovides C API. For Go API please see godoc.

Simple API

For the most simple use cases there is only one function:

// C (#include "webview.h")
int webview(const char *title, const char *url,	int width, int height, int resizable);
// Go (package github.com/zserge/webview)
func Open(title, url string, w, h int, resizable bool) error

In C you can use Mongoose or any other web server/framework you like.

You may use it with Go web server running on a random port:

ln, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
	log.Fatal(err)
}
defer ln.Close()
go func() {
 	// Set up your http server here
	log.Fatal(http.Serve(ln, nil))
}()
webview.Open("Hello", "http://"+ln.Addr().String(), 400, 300, false)

App lifecycle API

If you want to have more control over the app you can use the following functions:

  struct webview webview = {
      .title = title,
      .url = url,
      .width = w,
      .height = h,
      .resizable = resizable,
  };
  /* Create webview window using the provided options */
  webview_init(&webview);
  /* Main app loop, can be either blocking or non-blocking */
  while (webview_loop(&webview, blocking) == 0);
  /* Destroy webview window, often exits the app */
  webview_exit(&webview);

  /* To change window title later: */
  webview_set_title(&webview, "New title");

  /* To terminate the webview main loop: */
  webview_terminate(&webview);

Two-way bindings API

To evaluate arbitrary javascript code use the following C function:

webview_eval(&webview, "alert('hello, world');");

There is also a special callback (webview.external_invoke_cb) that can be invoked from javascript:

// C
void my_cb(struct webview *w, const char *arg) {
	...
}

// JS (note the trailing underscore)
window.external.invoke_('some arg');
// Exactly one string argument must be provided, to pass more complex objects
// serialize them to JSON and parse it in C. To pass binary data consider using
// base64.
window.external.invoke_(JSON.stringify({fn: 'sum', x: 5, y: 3}));

Multithreading support

Webview library is meant to be used from a single UI thread only. So if you want to call webview_eval or webview_terminate from some background thread

  • you have to use webview_dispatch to post some arbitrary function with some context to be executed inside the main UI thread:
// This function will be executed on the UI thread
void render(struct webview *w, void *arg) {
  webview_eval(w, ......);
}

// Dispatch render() function from another thread:
webview_dispatch(w, render, some_arg);

License

Code is distributed under MIT license, feel free to use it in your proprietary projects as well.

webview's People

Contributors

zserge avatar henkman avatar r-lyeh avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.