javascript – 他们是如何做到这一点的?模态书签和即时抓取?
作者:互联网
我希望用户从书签中打开弹出窗口,但页面加载的方式类似于jquery模式 – 这意味着没有丑陋的浏览器边框.
请参阅此处的示例,亚马逊如何做到这一点?
http://www.amazon.co.uk/wishlist/get-button
此外,他们显然是在抓取页面来获取信息,但页面加载几乎是即时的,他们是否缓存用户以某种方式读取的每个页面?他们怎么会实现这个目标呢?我尝试过简单的html-dom,但它远非即时
这是JS Amazon使用的:
javascript:(function(){var w=window,l=w.location,d=w.document,s=d.createElement('script'),e=encodeURIComponent,o='object',n='AUWLBookenGB',u='https://www.amazon.co.uk/wishlist/add',r='readyState',T=setTimeout,a='setAttribute',g=function(){d[r]&&d[r]!='complete'?T(g,200):!w[n]?(s[a]('charset','UTF-8'),s[a]('src',u+'.js?loc='+e(l)+'&b='+n),d.body.appendChild(s),f()):f()},f=function(){!w[n]?T(f,200):w[n].showPopover()};typeof s!=o?l.href=u+'?u='+e(l)+'&t='+e(d.title):g()}())
Beautified并手动反混淆:
javascript:(function() {
var w = window,
l = w.location,
d = w.document,
s = d.createElement('script'),
e = encodeURIComponent,
o = 'object',
n = 'AUWLBookenGB',
u = 'https://www.amazon.co.uk/wishlist/add',
r = 'readyState',
T = setTimeout,
a = 'setAttribute',
g = function() {
if (d[r] && d[r] != 'complete') {
T(g, 200);
} else if(!w[n]) {
s[a]('charset', 'UTF-8');
s[a]('src', u + '.js?loc=' + e(l) + '&b=' + n);
d.body.appendChild(s);
f();
} else {
f();
}
},
f = function() {
if (!w[n]) {
T(f, 200);
} else {
w[n].showPopover();
}
};
if (typeof s != o) {
l.href = u + '?u=' + e(l) + '&t=' + e(d.title);
} else {
g();
}
}())
解决方法:
我稍微对代码进行了去混淆,看到问题的帖子.
该脚本从amazon的网站请求脚本,其中包含以下URL:
https://www.amazon.co.uk/wishlist/add.js?loc=<CURRENT URL>&b=AUWLBookenGB
在响应代码(add.js example)内,< table>元素是动态创建和填充的,然后插入页面中.
“魔术”发生在生成脚本的服务器端.注入的JS文件提供所有必要的数据.
标签:jquery,javascript,simple-html-dom 来源: https://codeday.me/bug/20190704/1377166.html