V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
siteshen
V2EX  ›  前端开发

为什么很多前端要去掉链接,改用事件代替?

  •  
  •   siteshen · 2020-08-28 09:26:38 +08:00 · 3283 次点击
    这是一个创建于 1581 天前的主题,其中的信息可能已经有所发展或是发生改变。
    本来可以做成一个普通的链接,非要用 onclick 之类的东西来作跳转,导致链接原有的功能不可用。比如右键「复制链接」、比如鼠标中键「在新窗口打开」。

    以下 HTML 片段摘自某些网站:

    // 点击后,会在新窗口打开链接 xyz.png
    <p class="option preview" data-screen_glue_cid="sgk8897jh2xhboe5">预览</p>


    // 点击后跳转到 /tasks/{task-uuid}
    <div class="task-content__inner__oIt- hinted" data-title="增加排序功能">增加排序功能</div>
    16 条回复    2020-08-28 15:29:20 +08:00
    otakustay
        1
    otakustay  
       2020-08-28 09:28:09 +08:00
    就是偷懒,接 history api 还要用链接得加个 preventDefault
    xiaojun1994
        2
    xiaojun1994  
       2020-08-28 09:29:35 +08:00
    感觉省事。。a 标签还要覆盖样式
    bsg1992
        3
    bsg1992  
       2020-08-28 09:30:28 +08:00
    跳转前需要做一些逻辑上的效验或者操作啊
    kop1989
        4
    kop1989  
       2020-08-28 09:32:04 +08:00   ❤️ 1
    1 、跳转前有逻辑需要执行。
    2 、有可能你理解的界面切换并不是跳转。
    3 、需要加大页面切换时,你恶意获取到信息的难度。
    Lax
        5
    Lax  
       2020-08-28 09:32:18 +08:00
    因为是 SPA,大部分情况下看似跳转其实页面主体并没有刷新,全靠 JavaScript 来更新页面内容
    yaphets666
        6
    yaphets666  
       2020-08-28 09:56:57 +08:00
    你把这个事想的太简单了 在你看来只是跳转了一个页面 没准背后执行了很多代码
    jackchao7432
        7
    jackchao7432  
       2020-08-28 09:58:21 +08:00
    明不明白什么叫函数式编程?
    whileFalse
        8
    whileFalse  
       2020-08-28 10:07:32 +08:00 via iPhone
    通常因为懒,或者技术不佳,或者开发者根本不知道还有中键点击这种需求。
    Google 十年前就实现了的技术,有什么难的。Google 搜索结果页面里面的链接,鼠标指过去都是原始链接,mousedown 的时候就给你加私货。

    另有一种情有可原。你在 A 页面点击了按钮 B,页面变为 C 。但实际上并不存在 C 这个页面,也就是说没有一个能直达 C 的 URL,只能通过 A 页面点进去。这种情况肯定就不能提供 URL 形式的链接了。
    ChanKc
        9
    ChanKc  
       2020-08-28 10:22:57 +08:00 via Android   ❤️ 4
    我的理解
    所有发生 URL 变化的都应该使用 a,并且支持中键点击
    除此以外的,比如打开模态框对话框,可以用 button
    做不到的都是 a11y 有缺陷
    JasonSi
        10
    JasonSi  
       2020-08-28 12:57:49 +08:00
    加个 role="link" 就可以优化不少体验,懒得做 a11y 呗… 还是不够关注交互
    wangxiaoaer
        11
    wangxiaoaer  
       2020-08-28 13:03:39 +08:00 via iPhone
    那些说因为跳转前要执行代码或者 SPA 所以不用链接的,真是笑死我了。

    链接跳转跟执行代码不冲突。
    SPA 还有前端路由可用。
    wangxiaoaer
        12
    wangxiaoaer  
       2020-08-28 13:05:45 +08:00 via iPhone
    个人能想到的原因:
    1 懒
    2 菜
    3 反爬
    ragnaroks
        13
    ragnaroks  
       2020-08-28 13:47:39 +08:00
    html 当模板用
    loading
        14
    loading  
       2020-08-28 14:10:48 +08:00 via Android   ❤️ 1
    故意的,像现在新浪,手机版本,长按标题根本不能新窗打开,点进去后返回,全部新闻都刷了个新的,简直智障。
    Sapp
        15
    Sapp  
       2020-08-28 15:12:22 +08:00
    因为简单,比如你没发现现在很多前端都不在 url 里携带内容了吗? 复制一下重新打开,信息全丢完了,就是因为这样是最简单的
    dagouziwangwang
        16
    dagouziwangwang  
       2020-08-28 15:29:20 +08:00
    1. 懒 a 标签的样式需要改
    2. 路由跳转会有参数需要处理
    3. 还会有埋点的事件
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3475 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 04:53 · PVG 12:53 · LAX 20:53 · JFK 23:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.