上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

onurlchange是做什么用的

[复制链接]
  • TA的每日心情
    开心
    2023-3-3 14:48
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    20

    回帖

    18

    积分

    助理工程师

    积分
    18
    发表于 2023-3-1 12:15:40 | 显示全部楼层 | 阅读模式
    悬赏2油猫币未解决

    查看tampermonkey文档

    You have to match the path without the hash parameter and make use of window.onurlchange

    If a script runs on a single-page application, then it can use window.onurlchange to listen for URL changes:

    没看懂什么意思,谷歌搜了一遍也没有靠谱的解释

    该用户从未签到

    0

    主题

    60

    回帖

    89

    积分

    初级工程师

    积分
    89
    发表于 2023-3-1 14:04:03 | 显示全部楼层
    某些网页比如 github.com/twitter.com 不需要整体刷新页面也能更改地址栏的 url

    onurlchange 就是监听这种url改变事件的

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-3 14:48
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    20

    回帖

    18

    积分

    助理工程师

    积分
    18
    发表于 2023-3-1 21:59:39 | 显示全部楼层
    shabby 发表于 2023-3-1 14:04
    某些网页比如 github.com/twitter.com 不需要整体刷新页面也能更改地址栏的 url

    onurlchange 就是监听这 ...

    “不需要整体刷新页面也能更改地址栏的 url”这种的原理是啥
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-3 14:48
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    20

    回帖

    18

    积分

    助理工程师

    积分
    18
    发表于 2023-3-3 14:50:18 | 显示全部楼层
    rhdom 发表于 2023-3-1 21:59
    “不需要整体刷新页面也能更改地址栏的 url”这种的原理是啥

    我看似乎也是a标签里边的href?
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-3 14:48
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    20

    回帖

    18

    积分

    助理工程师

    积分
    18
    发表于 2023-4-16 16:04:03 | 显示全部楼层
    顶顶,期待解答
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5992

    回帖

    6780

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6780

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2023-4-16 19:59:08 | 显示全部楼层
    rhdom 发表于 2023-3-3 14:50
    我看似乎也是a标签里边的href?

    你指的是hash router吧
    a标签写#就可以跳转了
    原理其实不必深究
    就是浏览器提供的实现而已
    会用就可以了
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-3 14:48
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    20

    回帖

    18

    积分

    助理工程师

    积分
    18
    发表于 2024-2-16 22:04:54 | 显示全部楼层
    rhdom 发表于 2023-3-1 21:59
    “不需要整体刷新页面也能更改地址栏的 url”这种的原理是啥

    应该是history.pushState
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-3 14:48
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    20

    回帖

    18

    积分

    助理工程师

    积分
    18
    发表于 2024-2-16 22:20:48 | 显示全部楼层
    最近有空,调试了下
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-3 14:48
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    20

    回帖

    18

    积分

    助理工程师

    积分
    18
    发表于 2024-2-16 22:21:14 | 显示全部楼层
                    observeUrlChanges: {
                        allow: {
                            script: "window.onurlchange"
                        },
                        exec: (e,t,n)=>{
                            const {postMessage: r, onDisconnect: s} = e
                              , i = n.frameId
                              , o = n.tab.id
                              , a = e=>{
                                e.tabId == o && e.frameId == i && r({
                                    url: e.url
                                })
                            }
                            ;
                            ul(o, a),
                            s((()=>{
                                Al(o, a)
                            }
                            ))
                        }
                    },
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-3 14:48
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    20

    回帖

    18

    积分

    助理工程师

    积分
    18
    发表于 2024-2-16 22:45:21 | 显示全部楼层
    本帖最后由 rhdom 于 2024-2-16 23:07 编辑

                onurlchange: e=>{
                    const t = No("onurlchange");
                    if (!t)
                        return void kn((()=>e.disconnect()), 1);
                    let n = ()=>{
                        e.postMessage(St({
                            url: Jn.href
                        }))
                    }
                    ;
                    const o = ()=>{
                        n && (Ln.removeEventListener("hashchange", n),
                        n = null)
                    }
                    ;
                    Ln.addEventListener("hashchange", n),
                    t.onMessage.addListener((t=>{
                        e.postMessage(t)
                    }
                    )),
                    t.onDisconnect.addListener((()=>{
                        e.disconnect(),
                        o()
                    }
                    )),
                    e.onMessage.addListener((e=>{
                        t.postMessage(e)
                    }
                    )),
                    e.onDisconnect.addListener((()=>{
                        t.disconnect(),
                        o()
                    }
                    ))
                }

    我并没有太理解这里的onurlchange是怎么实现的,在hashchange断点下来了(不对好像没断下来),但是似乎hashchange并不能监听pushState
    看的乱七八糟的,还是VM的脚本,没法打断点,有空直接改tampermonkey的硬盘文件再调试一下
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表