比如在知乎问答页加一个图标,点击时可以载入评论。
遇到两个问题:
1.脚本不在沙盒中运行的话,是不是可以直接调用页面 js 对外暴露的函数?
2.现在 js 对外暴露很少,看 initator 很长一串调用栈,从相关 xhr 请求点到 initator ,也难以发现该怎么直接调用,也很难确定哪个是核心函数,就是发起请求并实现页面更新的那个函数,不知有没有什么好办法呢?
1
ljsh093 2022-06-25 20:29:06 +08:00 1
- 在知乎问答页加一个图标,点击时可以载入评论
这个可以 node.click()实现吧? - 脚本不在沙盒中运行的话,是不是可以直接调用页面 js 对外暴露的函数? 绑定在 window 对象下的随便调用,如果是匿名或者闭包的,可以试着模拟他的实现自己重写一个方法来调用 |
2
nowheretoseek OP @ljsh093 谢谢解惑,是不是说匿名或闭包的就没有办法直接调用了?
|
3
ljsh093 2022-06-25 21:07:29 +08:00 1
@nowheretoseek 是的,无法拿到上下文。不过有个暴力的办法就是把那个 script 节点删除再重新引入。
|
4
JackCh3ng 2022-06-26 19:24:11 +08:00
不知道有没有充分理解你的意思,我说一下我要实现这个功能的思路仅供参考。
我觉得你可以这样做: 1.找到评论的相关的 api ,可以通过这个 api 拿到相关数据。 2.在页面上插入一个按钮,在油猴脚本里实现点击事件,调用评论 api 。 3.把返回的数据写到页面上。 ps:油猴发送请求的函数 GM_xmlhttpRequest 。 |
5
Rache1 2022-06-26 20:37:43 +08:00 1
1.脚本不在沙盒中运行的话,是不是可以直接调用页面 js 对外暴露的函数?
在头部添加 “// @grant unsafeWindow”,然后就可以在脚本里面使用 unsafeWindow ,就可以访问到页面的 window 了,注意:直接在脚本里面使用的 window ,不是真实的 window 。 第二个问题,没有好的办法 😳 |
6
nowheretoseek OP @JackCh3ng 是这个意思,我也是你这个思路,这是觉得麻烦。所以想着是不是能通过 initator 的调用栈发现关键函数,直接调用页面 js 中的功能,而不是自己再实现一次。
但目前闭包、匿名函数在这些大站上都是标配了,从几位朋友的回复来看,基本没有办法直接调用。 |