对于初学者,这是小书签执行的代码:
(function(){
EN_CLIP_HOST = 'http://www.evernote.com';
try{
var x = document.createElement('SCRIPT');
x.type='text/javascript';
x.src = EN_CLIP_HOST + '/public/bookmarkClipper.js?' + (new Date().getTime()/100000);
document.getElementsByTagName('head')[0].appendChild(x);
} catch(e) {
location.href = EN_CLIP_HOST + '/clip.action?url=' + encodeURIComponent(location.href) + '&title=' + encodeURIComponent(document.title);
}
})();
它的作用相对简单。它尝试从 Evernote 站点获取脚本,并为请求添加时间戳,以便它始终拉取新副本。如果成功,则会将一堆 JavaScript 添加到页面,该页面构建一个 iframe,所有 Evernote 功能都从该 iframe 中公开,然后 iframe 可以使用标准 cookie 等,以确保您已登录,然后处理您的请求.
catch 块是为了以防动态脚本加载失败,导致您被重定向到 Evernote 站点,因此(我猜)它可以从那里剪辑内容。
要回答您仍然如何登录的具体问题,您仍然处于登录状态,因为您的浏览器现在具有 Evernote 网站 (www.evernote.com) 的会话 cookie,因此当 iframe 在第二个网站上打开时,这些 cookie 随之而来,Evernote 会识别出您已登录。使用 cookie 几乎是网络会话的标准,因此它们在这里没有做任何特别的事情,我相信您可以搜索 SO 以查找安全问题围绕基于 cookie 的会话。
要点是 iframe 本质上就像打开了一个单独的窗口,只是它允许一些有限的数据通过基本页面传递给 iframe,以便它知道您在哪个网站上。
希望有帮助。