:right-sidebar: True WebProcessExtension =================================================================== .. currentmodule:: gi.repository.WebKitWebProcessExtension .. versionadded:: 2.40 .. class:: WebProcessExtension(**properties: ~typing.Any) :no-contents-entry: Superclasses: :class:`~gi.repository.GObject.Object` Represents an extension of the web process. WebKitWebProcessExtension is a loadable module for the web process. It allows you to execute code in the web process and being able to use the DOM API, to change any request or to inject custom JavaScript code, for example. To create a WebKitWebProcessExtension you should write a module with an initialization function that could be either webkit_web_process_extension_initialize() with prototype ``WebKitWebProcessExtensionInitializeFunction`` or webkit_web_process_extension_initialize_with_user_data() with prototype ``WebKitWebProcessExtensionInitializeWithUserDataFunction``. 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. .. code-block:: c :dedent: static void web_page_created_callback (WebKitWebProcessExtension *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_process_extension_initialize (WebKitWebProcessExtension *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 :obj:`~gi.repository.WebKitWebProcessExtension.WebPage` is created. WebKit has to know where it can find the created WebKitWebProcessExtension. 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_process_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: .. code-block:: c :dedent: #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 (); // ... } Methods ------- .. rst-class:: interim-class .. class:: WebProcessExtension :no-index: .. method:: get_page(page_id: int) -> ~gi.repository.WebKitWebProcessExtension.WebPage Get the web page of the given ``page_id``\. .. versionadded:: 2.40 :param page_id: the identifier of the :obj:`~gi.repository.WebKitWebProcessExtension.WebPage` to get .. method:: send_message_to_context(message: ~gi.repository.WebKit.UserMessage, cancellable: ~gi.repository.Gio.Cancellable | None = None, callback: ~typing.Callable[[~gi.repository.GObject.Object | None, ~gi.repository.Gio.AsyncResult, ~typing.Any], None] | None = None, user_data: ~typing.Any = None) -> None Send ``message`` to the ``WebKitWebContext`` corresponding to ``extension``\. If ``message`` is floating, it's consumed. If you don't expect any reply, or you simply want to ignore it, you can pass :const:`None` as ``calback``\. When the operation is finished, ``callback`` will be called. You can then call :func:`~gi.repository.WebKitWebProcessExtension.WebProcessExtension.send_message_to_context_finish` to get the message reply. .. versionadded:: 2.40 :param message: a :obj:`~gi.repository.WebKitWebProcessExtension.UserMessage` :param cancellable: a :obj:`~gi.repository.Gio.Cancellable` or :const:`None` to ignore :param callback: A :obj:`~gi.repository.Gio.AsyncReadyCallback` to call when the request is satisfied or :const:`None` :param user_data: the data to pass to callback function .. method:: send_message_to_context_finish(result: ~gi.repository.Gio.AsyncResult) -> ~gi.repository.WebKit.UserMessage Finish an asynchronous operation started with :func:`~gi.repository.WebKitWebProcessExtension.WebProcessExtension.send_message_to_context`. .. versionadded:: 2.40 :param result: a :obj:`~gi.repository.Gio.AsyncResult` Signals ------- .. rst-class:: interim-class .. class:: WebProcessExtension.signals :no-index: .. method:: page_created(web_page: ~gi.repository.WebKitWebProcessExtension.WebPage) -> None The type of the None singleton. .. versionadded:: 2.40 :param web_page: the :obj:`~gi.repository.WebKitWebProcessExtension.WebPage` created .. method:: user_message_received(message: ~gi.repository.WebKit.UserMessage) -> None The type of the None singleton. .. versionadded:: 2.40 :param message: the :obj:`~gi.repository.WebKitWebProcessExtension.UserMessage` received