diff options
Diffstat (limited to 'src/components/script/script_task.rs')
-rw-r--r-- | src/components/script/script_task.rs | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/src/components/script/script_task.rs b/src/components/script/script_task.rs index 09d9ee59aa6..f9456819b80 100644 --- a/src/components/script/script_task.rs +++ b/src/components/script/script_task.rs @@ -1100,25 +1100,19 @@ impl ScriptTask { match page.hit_test(&point) { Some(node_address) => { debug!("node address is {:?}", node_address); - let mut node = - node::from_untrusted_node_address(self.js_runtime.deref().ptr, - node_address).root(); - debug!("clicked on {:s}", node.deref().debug_str()); - - // Traverse node generations until a node that is an element is - // found. - while !node.deref().is_element() { - match node.deref().parent_node() { - Some(parent) => node = parent.root(), - None => break, - } - } - if node.deref().is_element() { - let element: &JSRef<Element> = ElementCast::to_ref(&*node).unwrap(); - if "a" == element.deref().local_name { - self.load_url_from_element(page, element) + let temp_node = + node::from_untrusted_node_address( + self.js_runtime.deref().ptr, node_address); + + let maybe_node = temp_node.root().ancestors().find(|node| node.is_anchor_element()); + match maybe_node { + Some(node) => { + debug!("clicked on {:s}", node.debug_str()); + let element: &JSRef<Element> = ElementCast::to_ref(&node).unwrap(); + self.load_url_from_element(page, element); } + None => {} } } |