# 【测试】各个软件对锚点跳转的支持度

**URL:** <https://forum.freemdict.com/t/topic/3064>\
**Category:** 技术交流与词典编修\
**Created:** [2020 年8 月 26 日 08:53 UTC](https://forum.freemdict.com/t/topic/3064 "2020-08-26T08:53:31Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![atauzki](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/atauzki/32/1365_2.png) [@atauzki](https://forum.freemdict.com/u/atauzki)\
**Post date:** [2020 年8 月 26 日 08:53 UTC](https://forum.freemdict.com/t/topic/3064/1 "2020-08-26T08:53:32Z")

</div>

由于各个软件对锚点跳转的支持实现都有所不同（比如Goldendict会改a标签上的id），而这会影响到词性跳转等重要功能，例如：[【阿彌陀佛】类语大辞典2020.8.13写作利器！](https://forum.freemdict.com/t/topic/2905/2)， 于是我做了一个简单的测试。

# PART 1 页内锚点跳转

测试针对跳转目标的标签和属性分6种情况

- 标签：是a标签/不是a标签
- 属性：带id、带name，或者两者都带

为了简化叙述，后面使用 **目标标签+目标属性** 的格式来代替。示例：

```auto
    <!-- div+id -->
    <div id="yellow" class="box yellow">yellow div</div>
    <!-- a+id -->
    <a id="red" class="box red">red a</a>
    <!-- div+name -->
    <div name="blue" class="box blue">blue div</div>
    <!--a+name-->
    <a name="green" class="box green">green a</a>
    <!--div+id+name-->
    <div id="brown" name="brown" class="box brown">brown div</div>
    <!--a+id+name-->
    <a id="purple" name="purple" class="box purple">purple a</a>

```

测试用文件：[Desktop.7z](https://forum.freemdict.com/uploads/short-url/dnuGobUtgC7fpaO1yJV61eZ1VWj.7z) (1.5 KB)

结果如下：（0表示不能跳转，1表示可以跳转，div可以替换成span等其他非a标签）  
| |div+id|a+id|div+name|a+name|div+id+name|a+id+name  
|—|—|—|—|—|—|—|—|  
Chrome（HTML）|1|1|0|1|1|1  
GoldenDict (nonwill, qt5)|1|0|0|0|1|1  
mdict pc（win7虚拟机、win10）|1|1|0|1|1|1|  
GoldenDict(qt4)|1|0|0|0|1|1|  
深蓝词典|1|1|1|1|1|1|  
欧路（android）|1|0|0|0|1|1|  
mdict（android）|1|1|0|1|1|1|

看来非a标签+id基本没问题。

# PART 2 带entry的锚点跳转

在vim的提醒下增加了这一部分测试。

先上文件：[Desktop.7z](https://forum.freemdict.com/uploads/short-url/ENeJ6TqNxdr5H4DUppuKUmK0is.7z) (1.9 KB)  
其中两个HTML是为了测试Chrome设计的，作为对照。  
结果以跳转到页面指定锚点为准，只能跳转到页面开头不算支持。

结果：

| | div+id | a+id | div+name | a+name | div+id+name | a+id+name |
| --- | --- | --- | --- | --- | --- | --- |
| Chrome（HTML） | 1 | 1 | 0 | 1 | 1 | 1 |
| GoldenDict (nonwill, qt5) | 0 | 1 | 0 | 1 | 0 | 1 |
| mdict pc（win7虚拟机、win10） | 1 | 1 | 0 | 1 | 1 | 1 |
| 深蓝词典 | 1 | 1 | 1 | 1 | 1 | 1 |
| 欧路（android） | 0 | 1 | 0 | 0 | 1 | 1 |
| mdict（android） | 1 | 1 | 1 | 1 | 1 | 1 |
| GoldenDict(qt4) | 0 | 0 | 0 | 0 | 0 | 0 |

这次对goldendict来说，div+id就不行了。更糟糕的是qt4版本全军覆没……  
安卓版欧路跳转反应比另外两个软件慢了半拍。  
综上，a+id是兼容性最好的办法，这也验证了vim的观点。

**基本结论** ：兼容性最好的方式：

- 页内跳转：div/span+id
- 使用entry://跨页跳转：a+id

---

<div class="post-metadata">

**Author:** ![Vim](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/vim/32/8408_2.png) [@Vim](https://forum.freemdict.com/u/Vim)\
**Post date:** [2020 年8 月 26 日 09:11 UTC](https://forum.freemdict.com/t/topic/3064/2 "2020-08-26T09:11:42Z")

</div>

> [@atauzki](#):
>
> div+id

可否再测试一下 span + id？

我的实践：在Win 10GoldenDict (qt5) 中， span + id 是不可以的，但是a+id却是可以的。

---

<div class="post-metadata">

**Author:** ![atauzki](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/atauzki/32/1365_2.png) [@atauzki](https://forum.freemdict.com/u/atauzki)\
**Post date:** [2020 年8 月 26 日 09:13 UTC](https://forum.freemdict.com/t/topic/3064/3 "2020-08-26T09:13:16Z")

</div>

span和div理应是一样的，阿弥陀佛的类语大辞典－适合GoldenDict.mdx就是span+id，他mdict测试跳转不了，但我这里可以。所以我只能说无法复现。

---

<div class="post-metadata">

**Author:** ![endnote](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/e/9de0a6/32.png) [@endnote](https://forum.freemdict.com/u/endnote)\
**Post date:** [2020 年8 月 26 日 09:36 UTC](https://forum.freemdict.com/t/topic/3064/4 "2020-08-26T09:36:25Z")

</div>

**小结**  
代码方面，跨平台 div+id 的兼容性最好。  
软件方面，深蓝词典对各种跳转方式支持度最好，可见开发者是很良心的。

---

<div class="post-metadata">

**Author:** ![Vim](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/vim/32/8408_2.png) [@Vim](https://forum.freemdict.com/u/Vim)\
**Post date:** [2020 年8 月 26 日 09:37 UTC](https://forum.freemdict.com/t/topic/3064/5 "2020-08-26T09:37:15Z")

</div>

## GoldenDict 实际效果

 ![GIFDEMO2](https://forumcdn.freemdict.com/uploads/default/original/2X/5/5021596f273e79e315db5c9a50760c9644183a92.gif)

## 链接源文件

 ![2020-08-26_173119](https://forumcdn.freemdict.com/uploads/default/original/2X/a/a3a86b9a6de591fe84ef28371c2a3526451ad89c.png)

## 目标 ID 源文件：使用的是 a + id。若更改为 span + id，则定位失效。

 ![2020-08-26_173352](https://forumcdn.freemdict.com/uploads/default/original/2X/5/5054bfebea791993e1401a8060ef566e61df0e75.png)

## 更多实际案例：

 ![GIFDEMO](https://forumcdn.freemdict.com/uploads/default/original/2X/5/5c6c169c132385bfd592c0f64f1d2f56e0ce5d02.gif)

---

<div class="post-metadata">

**Author:** ![atauzki](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/atauzki/32/1365_2.png) [@atauzki](https://forum.freemdict.com/u/atauzki)\
**Post date:** [2020 年8 月 26 日 09:38 UTC](https://forum.freemdict.com/t/topic/3064/6 "2020-08-26T09:38:29Z")

</div>

源文件发一下看

---

<div class="post-metadata">

**Author:** ![atauzki](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/atauzki/32/1365_2.png) [@atauzki](https://forum.freemdict.com/u/atauzki)\
**Post date:** [2020 年8 月 26 日 09:40 UTC](https://forum.freemdict.com/t/topic/3064/7 "2020-08-26T09:40:26Z")

</div>

![image](https://forumcdn.freemdict.com/uploads/default/original/2X/8/80878facdb7b896f0ae64381a522584d7e574b6f.png)  
这个带entry的我没测试到，我测试的都是页内的锚点跳转

---

<div class="post-metadata">

**Author:** ![Vim](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/vim/32/8408_2.png) [@Vim](https://forum.freemdict.com/u/Vim)\
**Post date:** [2020 年8 月 26 日 09:41 UTC](https://forum.freemdict.com/t/topic/3064/8 "2020-08-26T09:41:14Z")

</div>

本页内或者跳到其他关键词的页内，都是如此。

Webster’s Third New International Dictionary Unabridged 有大量的链接跳转，我之前为这个问题大伤脑筋，后来才发现需要使用 a + id，而span 则不行。a + id 这种用法，与我所理解的HTML标准用法很不一样，有点怪怪的。

[Browse Dictionary A-Z.zip](https://forum.freemdict.com/uploads/short-url/4mNbMFwkjzyD0IFrikob0LMgJF.zip) (20.3 KB)

---

<div class="post-metadata">

**Author:** ![atauzki](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/atauzki/32/1365_2.png) [@atauzki](https://forum.freemdict.com/u/atauzki)\
**Post date:** [2020 年8 月 26 日 09:50 UTC](https://forum.freemdict.com/t/topic/3064/9 "2020-08-26T09:50:33Z")

</div>

goldendict可以正确解析entry://链接，比如  
 ![image](https://forumcdn.freemdict.com/uploads/default/original/2X/9/96b5aa76c8efde46984bdd7813eefcfd27976875.png)  
转成

 ![image](https://forumcdn.freemdict.com/uploads/default/original/2X/8/8a437c39383e78b4d7b8d3c22c6ae82748e95413.png)  
但是页内锚点就出问题。  
 ![image](https://forumcdn.freemdict.com/uploads/default/original/2X/6/678bf8f0fc89df44cb242592bb0ee5652b6abd75.png)  
那我的测试文件，`target to red box.`能跳转吗

---

<div class="post-metadata">

**Author:** ![Vim](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/vim/32/8408_2.png) [@Vim](https://forum.freemdict.com/u/Vim)\
**Post date:** [2020 年8 月 26 日 10:03 UTC](https://forum.freemdict.com/t/topic/3064/10 "2020-08-26T10:03:40Z")

</div>

测试文件， `target to red box.` 不能跳转。

估计我们之前的认识区别就在这里了，至少GoldenDict是这样，其他软件不清楚：

- 加entry的链接，要使用a + id
- 不加entry的链接，要使用span + id

我若只在GoldenDict中使用，那我就这样使用：  
1、链接文件写：entry + id  
2、目标文件写：a + id

建议重新设计测试案例，重新对比各词典的适配情况，这样实验就完美了。毕竟词条间的义项跳转是很实用的功能，时常能用到。

---

<div class="post-metadata">

**Author:** ![atauzki](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/atauzki/32/1365_2.png) [@atauzki](https://forum.freemdict.com/u/atauzki)\
**Post date:** [2020 年8 月 26 日 10:11 UTC](https://forum.freemdict.com/t/topic/3064/11 "2020-08-26T10:11:02Z")

</div>

我已经加了一个词条测试entry://的跳转，等我测试完了再发，

---

<div class="post-metadata">

**Author:** ![last\_idol](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/last_idol/32/2205_2.png) [@last\_idol](https://forum.freemdict.com/u/last_idol)\
**Post date:** [2020 年8 月 26 日 10:35 UTC](https://forum.freemdict.com/t/topic/3064/12 "2020-08-26T10:35:46Z")

</div>

`name`属性已经淘汰很久了，推荐用`id`。  
[https://www.w3.org/TR/2011/WD-html-markup-20110525/a.html#a.attrs.name](https://www.w3.org/TR/2011/WD-html-markup-20110525/a.html#a.attrs.name)

---

<div class="post-metadata">

**Author:** ![atauzki](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/atauzki/32/1365_2.png) [@atauzki](https://forum.freemdict.com/u/atauzki)\
**Post date:** [2020 年8 月 26 日 10:39 UTC](https://forum.freemdict.com/t/topic/3064/13 "2020-08-26T10:39:14Z")

</div>

主要是考虑到有些很老式的词典可能还在用name跳转的方法，所以放进来测试一下。

---

<div class="post-metadata">

**Author:** ![atauzki](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/atauzki/32/1365_2.png) [@atauzki](https://forum.freemdict.com/u/atauzki)\
**Post date:** [2020 年8 月 26 日 10:58 UTC](https://forum.freemdict.com/t/topic/3064/15 "2020-08-26T10:58:24Z")

</div>

> [@atauzki](#):
>
> 为了简化叙述，后面使用 **目标标签+目标属性** 的格式来代替。

锚点只要由id就可以称为锚点了，目标是a也可以跳转。

---

<div class="post-metadata">

**Author:** ![Vim](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/vim/32/8408_2.png) [@Vim](https://forum.freemdict.com/u/Vim)\
**Post date:** [2020 年8 月 26 日 12:26 UTC](https://forum.freemdict.com/t/topic/3064/16 "2020-08-26T12:26:55Z")

</div>

现在这个实验完美了！赞！！

---

<div class="post-metadata">

**Author:** ![sxingbai](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/s/919ad9/32.png) [@sxingbai](https://forum.freemdict.com/u/sxingbai)\
**Post date:** [2020 年8 月 28 日 04:25 UTC](https://forum.freemdict.com/t/topic/3064/17 "2020-08-28T04:25:17Z")

</div>

好帖留名，多谢

---

<div class="post-metadata">

**Author:** ![fruition](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/fruition/32/51082_2.png) [@fruition](https://forum.freemdict.com/u/fruition)\
**Post date:** [2020 年9 月 5 日 11:45 UTC](https://forum.freemdict.com/t/topic/3064/18 "2020-09-05T11:45:51Z")

</div>

想在圖形的精確的位置前面加個 id 此法來定位卻定不了位  
[https://www.w3schools.com/cssref/tryit.asp?filename=trycss3\_target](https://www.w3schools.com/cssref/tryit.asp?filename=trycss3_target)

 ![2020-09-05_194444](https://forumcdn.freemdict.com/uploads/default/original/2X/4/42c1fe53851447a7a6053b49c36cdbdf8decd928.png)

---

<div class="post-metadata">

**Author:** ![fruition](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/fruition/32/51082_2.png) [@fruition](https://forum.freemdict.com/u/fruition)\
**Post date:** [2020 年9 月 5 日 11:55 UTC](https://forum.freemdict.com/t/topic/3064/19 "2020-09-05T11:55:49Z")

</div>

可有辦法類此架構下定位於圖形的精確定位  
如上圖 for and and 定不了位  
[https://www.w3schools.com/cssref/tryit.asp?filename=trycss3\_target![2020-09-05\_195922|690x301](upload://lXskRJhZuEnovhSlg3zCCcEivrk.png)](https://www.w3schools.com/cssref/tryit.asp?filename=trycss3_target!%5B2020-09-05_195922%7C690x301%5D(upload://lXskRJhZuEnovhSlg3zCCcEivrk.png))  
只能透過 input type=“search” 來定位

 ![2020-09-05_200119](https://forumcdn.freemdict.com/uploads/default/original/2X/3/30633409c8df537d61422a7d579d1843b6db6695.png)

---

<div class="post-metadata">

**Author:** ![hua](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/hua/32/11090_2.png) [@hua](https://forum.freemdict.com/u/hua)\
**Post date:** [2020 年12 月 26 日 02:33 UTC](https://forum.freemdict.com/t/topic/3064/20 "2020-12-26T02:33:16Z")

</div>

可以，网页也是可以一层一层的

---

<div class="post-metadata">

**Author:** ![fruition](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/fruition/32/51082_2.png) [@fruition](https://forum.freemdict.com/u/fruition)\
**Post date:** [2020 年12 月 26 日 03:07 UTC](https://forum.freemdict.com/t/topic/3064/21 "2020-12-26T03:07:06Z")

</div>

謝謝回覆，這個問題好擺了好久了，你的回答讓我突然想到可能是 css z index 沒有設置，因為 highlight 的文字層的優先權較高於圖片

[下一页](https://forum.freemdict.com/t/topic/3064.md?page=2)
