extern crate gio;
extern crate glib;
extern crate gtk;
extern crate webkit2gtk;
#[cfg(feature = "v2_4")]
use glib::ToVariant;
use gtk::{prelude::*, Window, WindowType};
use webkit2gtk::{SettingsExt, WebContext, WebContextExt, WebView, WebViewExt};
#[cfg(feature = "v2_6")]
use webkit2gtk::{UserContentManager, WebViewExtManual};
fn main() {
gtk::init().unwrap();
let window = Window::new(WindowType::Toplevel);
let context = WebContext::default().unwrap();
#[cfg(feature = "v2_4")]
context.set_web_extensions_initialization_user_data(&"webkit".to_variant());
context.set_web_extensions_directory("../webkit2gtk-webextension-rs/example/target/debug/");
#[cfg(feature = "v2_6")]
let webview =
WebView::new_with_context_and_user_content_manager(&context, &UserContentManager::new());
#[cfg(not(feature = "v2_6"))]
let webview = WebView::with_context(&context);
webview.load_uri("https://crates.io/");
window.add(&webview);
let settings = WebViewExt::settings(&webview).unwrap();
settings.set_enable_developer_extras(true);
window.show_all();
webview.run_javascript("alert('Hello');", None::<&gio::Cancellable>, |_result| {});
#[cfg(feature = "v2_22")]
webview.run_javascript("42", None::<&gio::Cancellable>, |result| match result {
Ok(result) => {
use java_script_core::ValueExt;
let value = result.js_value().unwrap();
println!("is_boolean: {}", value.is_boolean());
println!("is_number: {}", value.is_number());
println!("{:?}", value.to_int32());
println!("{:?}", value.to_boolean());
}
Err(error) => println!("{}", error),
});
window.connect_delete_event(|_, _| {
gtk::main_quit();
glib::Propagation::Proceed
});
gtk::main();
}