1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-24 17:57:35 +00:00

LibWeb: Allow reloading the current page with location.reload()

This commit is contained in:
Andreas Kling 2020-05-18 22:05:13 +02:00
parent 71007f6ebb
commit 3b11e471bd
5 changed files with 32 additions and 3 deletions

View file

@ -3,12 +3,14 @@
<head> <head>
<title>window.location test</title> <title>window.location test</title>
<style> <style>
#clickme { background-color: red; color: yellow; } #set_href { background-color: red; color: yellow; }
#reload { background-color: blue; color: #ccc; }
</style> </style>
</head> </head>
<body> <body>
<pre></pre> <pre></pre>
<div id="clickme">Click me to navigate away!</div> <div id="set_href">Click me to set location.href!</div>
<div id="reload">Click me to call location.reload()!</div>
<script> <script>
var pre = document.querySelectorAll("pre")[0]; var pre = document.querySelectorAll("pre")[0];
pre.innerHTML += "href: " + location.href + '\n'; pre.innerHTML += "href: " + location.href + '\n';
@ -19,9 +21,13 @@
pre.innerHTML += "hash: " + location.hash + '\n'; pre.innerHTML += "hash: " + location.hash + '\n';
pre.innerHTML += "search: " + location.search + '\n'; pre.innerHTML += "search: " + location.search + '\n';
document.getElementById("clickme").addEventListener("mousedown", function() { document.getElementById("set_href").addEventListener("mousedown", function() {
window.location.href = 'http://serenityos.org/'; window.location.href = 'http://serenityos.org/';
}); });
document.getElementById("reload").addEventListener("mousedown", function() {
window.location.reload();
});
</script> </script>
</body> </body>
</html> </html>

View file

@ -45,6 +45,8 @@ LocationObject::LocationObject()
put_native_property("hash", hash_getter, nullptr); put_native_property("hash", hash_getter, nullptr);
put_native_property("search", search_getter, nullptr); put_native_property("search", search_getter, nullptr);
put_native_property("protocol", protocol_getter, nullptr); put_native_property("protocol", protocol_getter, nullptr);
put_native_function("reload", reload);
} }
LocationObject::~LocationObject() LocationObject::~LocationObject()
@ -110,6 +112,13 @@ JS::Value LocationObject::protocol_getter(JS::Interpreter& interpreter)
return JS::js_string(interpreter, builder.to_string()); return JS::js_string(interpreter, builder.to_string());
} }
JS::Value LocationObject::reload(JS::Interpreter& interpreter)
{
auto& window = static_cast<WindowObject&>(interpreter.global_object());
window.impl().did_call_location_reload({});
return JS::js_undefined();
}
} }
} }

View file

@ -40,6 +40,8 @@ public:
private: private:
virtual const char* class_name() const override { return "LocationObject"; } virtual const char* class_name() const override { return "LocationObject"; }
static JS::Value reload(JS::Interpreter&);
static JS::Value href_getter(JS::Interpreter&); static JS::Value href_getter(JS::Interpreter&);
static void href_setter(JS::Interpreter&, JS::Value); static void href_setter(JS::Interpreter&, JS::Value);

View file

@ -119,4 +119,15 @@ void Window::did_set_location_href(Badge<Bindings::LocationObject>, const String
view->load(new_href); view->load(new_href);
} }
void Window::did_call_location_reload(Badge<Bindings::LocationObject>)
{
auto* frame = document().frame();
if (!frame)
return;
auto* view = frame->html_view();
if (!view)
return;
view->reload();
}
} }

View file

@ -50,6 +50,7 @@ public:
void set_timeout(JS::Function&, i32); void set_timeout(JS::Function&, i32);
void did_set_location_href(Badge<Bindings::LocationObject>, const String& new_href); void did_set_location_href(Badge<Bindings::LocationObject>, const String& new_href);
void did_call_location_reload(Badge<Bindings::LocationObject>);
private: private:
explicit Window(Document&); explicit Window(Document&);