Class
WebKit2WebExtensionWebExtension
unstable since: 4.1
Description [src]
class WebKit2WebExtension.WebExtension : GObject.Object
{
priv: WebKitWebExtensionPrivate*
}
Represents an extension of the WebProcess.
WebKitWebExtension is a loadable module for the WebProcess. It allows you to execute code in the WebProcess and being able to use the DOM API, to change any request or to inject custom JavaScript code, for example.
To create a WebKitWebExtension you should write a module with an initialization function that could
be either webkit_web_extension_initialize()
with prototype WebKitWebExtensionInitializeFunction
or
webkit_web_extension_initialize_with_user_data()
with prototype WebKitWebExtensionInitializeWithUserDataFunction
.
This function has to be public and it has to use the #G_MODULE_EXPORT macro. It is called when the
web process is initialized.
static void
web_page_created_callback (WebKitWebExtension *extension,
WebKitWebPage *web_page,
gpointer user_data)
{
g_print ("Page %d created for %s\n",
webkit_web_page_get_id (web_page),
webkit_web_page_get_uri (web_page));
}
G_MODULE_EXPORT void
webkit_web_extension_initialize (WebKitWebExtension *extension)
{
g_signal_connect (extension, "page-created",
G_CALLBACK (web_page_created_callback),
NULL);
}
The previous piece of code shows a trivial example of an extension that notifies when
a WebKitWebPage
is created.
WebKit has to know where it can find the created WebKitWebExtension. To do so you
should use the webkit_web_context_set_web_extensions_directory()
function. The signal
WebKitWebContext::initialize-web-extensions
is the recommended place to call it.
To provide the initialization data used by the webkit_web_extension_initialize_with_user_data()
function, you have to call webkit_web_context_set_web_extensions_initialization_user_data()
with
the desired data as parameter. You can see an example of this in the following piece of code:
#define WEB_EXTENSIONS_DIRECTORY // ...
static void
initialize_web_extensions (WebKitWebContext *context,
gpointer user_data)
{
// Web Extensions get a different ID for each Web Process
static guint32 unique_id = 0;
webkit_web_context_set_web_extensions_directory (
context, WEB_EXTENSIONS_DIRECTORY);
webkit_web_context_set_web_extensions_initialization_user_data (
context, g_variant_new_uint32 (unique_id++));
}
int main (int argc, char **argv)
{
g_signal_connect (webkit_web_context_get_default (),
"initialize-web-extensions",
G_CALLBACK (initialize_web_extensions),
NULL);
GtkWidget *view = webkit_web_view_new ();
// ...
}
Available since: 4.1
Instance methods
webkit_web_extension_send_message_to_context
Send message
to the WebKitWebContext
corresponding to extension
. If message
is floating, it’s consumed.
since: 2.28
webkit_web_extension_send_message_to_context_finish
Finish an asynchronous operation started with webkit_web_extension_send_message_to_context().
since: 2.28
Signals
WebKit2WebExtension.WebExtension::page-created
This signal is emitted when a new WebKitWebPage
is created in
the Web Process.
unstable since: 4.1
WebKit2WebExtension.WebExtension::user-message-received
This signal is emitted when a WebKitUserMessage
is received from the
WebKitWebContext
corresponding to extension
. Messages sent by WebKitWebContext
are always broadcasted to all WebKitWebExtension
s and they can’t be
replied to. Calling webkit_user_message_send_reply()
will do nothing.
since: 2.28
Signals inherited from GObject (1)
GObject::notify
The notify signal is emitted on an object when one of its properties has its value set through g_object_set_property(), g_object_set(), et al.
since: 2.0