1
zzNucker 2013-10-06 18:37:52 +08:00
这个。。。。
不通用吧。。。。。 |
2
breeswish 2013-10-06 18:38:41 +08:00
因为这些都是在click事件里进一步处理的。。
请手工分析。。 |
3
clowwindy 2013-10-06 18:42:40 +08:00 2
图灵停机问题……不存在通用的算法求出一段代码的执行结果,除非实际运行这段代码
|
6
clowwindy 2013-10-06 22:10:08 +08:00
@est 所以需要触发点击事件执行一下代码啊。但是你又不知道点击后会发生什么,有可能触发不好的结果,就拿 V2EX 这个页面来说,会把所有的收藏、忽略、隐藏、感谢和回复都点一遍。某些网站则有可能触发购买、删除、举报等等。
所以只能针对特定网站,找出规律,做出有局限性的插件。 |
7
xingzhi 2013-10-06 22:17:07 +08:00
找规律。
例如找出这个元素的 id、class 然后去 js 搜它对应的动作。 最简单就是点击它然后看「network」的请求了。 |
8
est 2013-10-06 23:10:49 +08:00
@clowwindy 你见过Google搜索结果页面那个劫持不?点击前,链接是直链,鼠标点击左中右任意,都会在跳转前变成另外一个 google.com/sa?url=xxx 这样的链接。
用同样的原理做一个userscripts不难吧。 1. 搜索页面所有 href="javascript" 的链接 2. 把window.open改成 element.href="xxx" 这样不会影响ajax操作和其他js操作,只针对js打开新窗口操作进行拦截。 你所说的停机问题虽然有一定道理,但是我们为了实现目标,可以通过判断停机,也可以绕过这个,根本不需要去判断停机。 就好比如何嗅探swf里边的视频真实地址一样,我们把flashocx.dll里边播放视频的函数劫持成一个alert() ,不就可以得到所有视频了么。 |
9
kchum 2013-10-06 23:21:21 +08:00
只有特定针对某个site写userscript吧
|
10
binux 2013-10-06 23:31:02 +08:00
@est 如果那个href="javascript"除了会window.open以外,还会“收藏、忽略、隐藏、感谢和回复”怎么办?
|
11
est 2013-10-06 23:39:47 +08:00
@binux 不太明白你的意思,就是ajax点赞那种按钮?不会有影响啊。。。。ajax的xhr调用不会受到window.open影响的。
|
13
est 2013-10-07 00:27:43 +08:00
@binux 怎么不执行,执行的啊。只不过执行后 href 改成了真实链接而已。再点击就没有 href=javascript: 的效果了而已。
|
14
dorentus 2013-10-07 00:44:55 +08:00
肯定没法有通用的实现的。
比如某个网站,一个 a[href=javascript;] 点击(或者其它事件触发后)的行为是: 1) 向 A URL 发送 AJAX 请求,根据服务器返回的结果,转向 2) 或 3) 或 4) 或其它 2) 展示一个面向用户的提示信息,结束 3) 展示另一个面向用户的提示信息,然后提交一个表单到 B URL(之后页面是否会跳转,往那个 URL 跳转完全就看服务器了) 4) 展示又一个面向用户的提示信息,然后 window.open C URL(话说这种方式多半会被浏览器拦截吧) ... |
15
bombless 2013-10-07 01:05:17 +08:00
location这个对象这么复杂,按我的理解,是不可能复制出来它这种行为的
|
17
msg7086 2013-10-07 04:43:03 +08:00
用javascript写一个javascript执行引擎,在沙盒里模拟点击事件,然后判定如果事件请求是可以用a标签来模拟的话,重写a标签。
|
18
tioover 2013-10-07 18:09:13 +08:00 via Android
思路,拦截请求
|
21
est 2013-10-08 08:36:44 +08:00
@bombless 我想了一下,的确有location这个麻烦。但是理论上还是不难吧。有个 getter setter 的障碍,不过现在有办法,用 Object.defineProperty
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty |
23
tabris17 2013-10-08 14:57:47 +08:00
脚本要执行了才能知道真实地址啊,比如脚本要请求服务器获取返回值,然后根据返回值判断跳转那个URL,你不执行如何能知道
|