aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/script_task.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/script/script_task.rs')
-rw-r--r--src/components/script/script_task.rs28
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 => {}
}
}