소스 검색

LibHTML: Clicking on a fragment link should prefer <a id> over <a name>

It turns out that other engines prefer <a id> over <a name> when
deciding which anchor element to jump to.

This patch aligns LibHTML's behavior with WebKit and Gecko.

Thanks to "/cam 2" for bringing this up. :^)
Andreas Kling 5 년 전
부모
커밋
8e710b16de
1개의 변경된 파일12개의 추가작업 그리고 9개의 파일을 삭제
  1. 12 9
      Libraries/LibHTML/HtmlView.cpp

+ 12 - 9
Libraries/LibHTML/HtmlView.cpp

@@ -319,17 +319,20 @@ void HtmlView::scroll_to_anchor(const StringView& name)
     if (!document())
         return;
 
-    HTMLAnchorElement* element = nullptr;
-    document()->for_each_in_subtree([&](auto& node) {
-        if (is<HTMLAnchorElement>(node)) {
-            auto& anchor_element = to<HTMLAnchorElement>(node);
-            if (anchor_element.name() == name) {
-                element = &anchor_element;
-                return IterationDecision::Break;
+    const HTMLAnchorElement* element = nullptr;
+    if (auto* candidate = document()->get_element_by_id(name)) {
+        if (is<HTMLAnchorElement>(*candidate))
+            element = to<HTMLAnchorElement>(candidate);
+    }
+    if (!element) {
+        auto candidates = document()->get_elements_by_name(name);
+        for (auto* candidate : candidates) {
+            if (is<HTMLAnchorElement>(*candidate)) {
+                element = to<HTMLAnchorElement>(candidate);
+                break;
             }
         }
-        return IterationDecision::Continue;
-    });
+    }
 
     if (!element) {
         dbg() << "HtmlView::scroll_to_anchor(): Anchor not found: '" << name << "'";