想用油猴脚本调用页面上的函数,请问怎么做?

2022-06-25 20:01:20 +08:00
 nowheretoseek

比如在知乎问答页加一个图标,点击时可以载入评论。

遇到两个问题:

1.脚本不在沙盒中运行的话,是不是可以直接调用页面 js 对外暴露的函数?

2.现在 js 对外暴露很少,看 initator 很长一串调用栈,从相关 xhr 请求点到 initator ,也难以发现该怎么直接调用,也很难确定哪个是核心函数,就是发起请求并实现页面更新的那个函数,不知有没有什么好办法呢?

1181 次点击
所在节点    问与答
6 条回复
ljsh093
2022-06-25 20:29:06 +08:00
- 在知乎问答页加一个图标,点击时可以载入评论

这个可以 node.click()实现吧?

- 脚本不在沙盒中运行的话,是不是可以直接调用页面 js 对外暴露的函数?

绑定在 window 对象下的随便调用,如果是匿名或者闭包的,可以试着模拟他的实现自己重写一个方法来调用
nowheretoseek
2022-06-25 21:01:26 +08:00
@ljsh093 谢谢解惑,是不是说匿名或闭包的就没有办法直接调用了?
ljsh093
2022-06-25 21:07:29 +08:00
@nowheretoseek 是的,无法拿到上下文。不过有个暴力的办法就是把那个 script 节点删除再重新引入。
JackCh3ng
2022-06-26 19:24:11 +08:00
不知道有没有充分理解你的意思,我说一下我要实现这个功能的思路仅供参考。
我觉得你可以这样做:
1.找到评论的相关的 api ,可以通过这个 api 拿到相关数据。
2.在页面上插入一个按钮,在油猴脚本里实现点击事件,调用评论 api 。
3.把返回的数据写到页面上。
ps:油猴发送请求的函数 GM_xmlhttpRequest 。
Rache1
2022-06-26 20:37:43 +08:00
1.脚本不在沙盒中运行的话,是不是可以直接调用页面 js 对外暴露的函数?
在头部添加 “// @grant unsafeWindow”,然后就可以在脚本里面使用 unsafeWindow ,就可以访问到页面的 window 了,注意:直接在脚本里面使用的 window ,不是真实的 window 。

第二个问题,没有好的办法 😳
nowheretoseek
2022-06-27 12:53:45 +08:00
@JackCh3ng 是这个意思,我也是你这个思路,这是觉得麻烦。所以想着是不是能通过 initator 的调用栈发现关键函数,直接调用页面 js 中的功能,而不是自己再实现一次。

但目前闭包、匿名函数在这些大站上都是标配了,从几位朋友的回复来看,基本没有办法直接调用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/862173

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX