# webview
**Repository Path**: naqvis/webview
## Basic Information
- **Project Name**: webview
- **Description**: Crystal bindings to Webview library
- **Primary Language**: C++
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-06-16
- **Last Updated**: 2022-05-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Crystal Webview
Crystal language bindings for [zserge's Webview](https://github.com/zserge/webview) which is an excellent cross-platform single header webview library for C/C++ using Gtk, Cocoa or MSHTML/Edge repectively.
**Webview** relys on default rendering engine of host Operating System, thus binaries generated with this Shard will be much more leaner as compared to [Electron](https://github.com/electron/electron) which bundles Chromium with each distribution.
Shard Supports **Two-way bindings** between Crystal and JavaScript. You can invoke JS code via `Webview::Webview#eval` and calling Crystal code from JS is done via `WebView::Webview#bind` (refer to Example 3 for sample on how to invoke Crystal functions from JS)
Webview supported platforms and the engines you can expect to render your application content are as follows:
| Operating System | Browser Engine Used |
| ---------------- | ------------------- |
| OSX | Cocoa/WebKit |
| Linux | Gtk-webkit2 |
| Windows | MSHTML or EdgeHTML |
## Pre-requisite
If you're planning on targeting Linux you must ensure that Webkit2gtk is already installed and available for discovery via the pkg-config command.
## Installation
1. Add the dependency to your `shard.yml`:
```yaml
dependencies:
webview:
github: naqvis/webview
```
2. Run `shards install`
## Usage
### Example 1: Loading URL
```crystal
require "webview"
wv = Webview.window(640, 480, Webview::SizeHints::NONE, "Hello WebView", "http://crystal-lang.org")
wv.run
wv.destroy
```
### Example 2: Loading HTML
```crystal
require "webview"
html = <<-HTML
data:text/html,
Hello,World!
City Gallery
London
London is the capital city of England. It is the most populous city in the United Kingdom, with a metropolitan area of over 13 million inhabitants.
Standing on the River Thames, London has been a major settlement for two millennia, its history going back to its founding by the Romans, who named it Londinium.
HTML
wv = Webview.window(640, 480, Webview::SizeHints::NONE, "Hello WebView", html)
wv.run
wv.destroy
```
### Example 3: Calling Crystal code from JavaScript
```crystal
require "webview"
html = <<-HTML
data:text/html,
hello
HTML
wv = Webview.window(640, 480, Webview::SizeHints::NONE, "Hello WebView", html, true)
wv.bind("noop", Webview::JSProc.new { |a|
pp "Noop called with arguments: #{a}"
JSON::Any.new("noop")
})
wv.bind("add", Webview::JSProc.new { |a|
pp "add called with arguments: #{a}"
ret = 0_i64
a.each do |v|
ret += v.as_i64
end
JSON::Any.new(ret)
})
wv.run
wv.destroy
```
## Contributing
1. Fork it ()
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request
## Contributors
- [Ali Naqvi](https://github.com/naqvis) - creator and maintainer