mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 16:52:43 +00:00 
			
		
		
		
	LibWeb: Allow reloading the current page with location.reload()
This commit is contained in:
		
							parent
							
								
									71007f6ebb
								
							
						
					
					
						commit
						3b11e471bd
					
				
					 5 changed files with 32 additions and 3 deletions
				
			
		|  | @ -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> | ||||||
|  |  | ||||||
|  | @ -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(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -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); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -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(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -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&); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling