0

I'm experimenting with gjs and webkit2, how can i get the http headers of a request made with load_uri
i have the following code

const Gtk = imports.gi.Gtk, WebKit=imports.gi.WebKit2, contentManager=new WebKit.UserContentManager,
      view = WebKit.WebView.new_with_user_content_manager(contentManager);

Gtk.init(null);

let win = new Gtk.Window(), Response=new WebKit.URIResponse();

contentManager.add_script (new WebKit.UserScript("alert ('test');",0,1,null,null));
view.load_uri('https://www.gnome.org');

win.add(view);
win.set_title("test");
win.set_icon_from_file("/games/aptdaemon-resolve.png");
win.connect('destroy', () => { Gtk.main_quit(); });
win.set_size_request(640, 480);

win.show_all();
view.connect("load-changed",function (instance,state)
    {
    if (state == 3)
     {
     log ("URL"+Response.get_uri());
     view.run_javascript ("alert (document.body.innerHTML)",null,null);
     }
    });

Gtk.main();

for example Response.get_uri returns an empty string, how to access response headers, and how to exchange messages between scripts injected with view.run_javascript and gjs. i want the body html be sent to gjs-?

  • Okay, got it myself - message headers WebKitView get_main_resource -> returns WebResource WebResource get_response -> returns URIResponse URIResponse get_http_headers -> returns Soup MessageHeaders – Schmaehgrunza Dec 06 '22 at 18:37

1 Answers1

0

got it

const Gtk = imports.gi.Gtk;
const WebKit=imports.gi.WebKit2;

Gtk.init(null);

const win = new Gtk.Window(), contentManager=new WebKit.UserContentManager, view = WebKit.WebView.new_with_user_content_manager(contentManager);
let response_STR;
contentManager.connect("script-message-received::pipe", function (instance, message)
    {
    message=message.get_js_value().to_string ();
    log (message); 
    });

contentManager.register_script_message_handler("pipe");


view.load_uri('https://www.gnome.org');

win.add(view);
win.set_title("test");
win.connect('destroy', () => { Gtk.main_quit(); });
win.set_size_request(640, 480);
win.show_all();

view.connect("load-changed",function (instance,status)
    {
    let headers, response_STR="";
    if (status == 3)
        {
        /* WebKitView.get_main_resource -> returns WebResource
           WebResource.get_response -> returns URIResponse
           URIResponse.get_http_headers -> returns Soup.MessageHeaders */
        headers=view.get_main_resource().get_response().get_http_headers();
        response_STR="";
        headers.foreach ((name, value) => { response_STR+=name+": "+value+"\n"});
        view.run_javascript('window.webkit.messageHandlers.pipe.postMessage(document.body.innerHTML);', null, null);
        log (response_STR);
        }
    });

Gtk.main();