login.js 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. /*
  2. * CSDN 登录框
  3. * Copyright 2012, zhuhz@csdn.net
  4. * Date: 2012-6-6
  5. *
  6. * 调用:csdn.showLogin(callback);
  7. *
  8. * 获取当前登录用户名(可用于判断用户是否处于登录状态):csdn.getCookie('UserName')
  9. */
  10. var csdn = window.csdn || function () { };
  11. csdn.domain = "passport.csdn.net";
  12. csdn.doing = false;
  13. csdn.$ = function (id) {
  14. return document.getElementById(id);
  15. };
  16. csdn.loginBack = null;
  17. csdn.showLogin = function (callback) {
  18. var div = document.createElement("DIV");
  19. div.id = "csdn_divh";
  20. //div.style.marginLeft = "-200px";
  21. div.style.marginTop = -75 + (document.documentElement.scrollTop || document.body.scrollTop) + "px";
  22. // var title = '登录<a class="close" href="javascript:void(0);" onclick="javascript:csdn.closeLogin();return false;" title="关闭窗口">[X]</a>';
  23. var title = '';
  24. var body = csdn.loginForm();
  25. var bottom = '';
  26. var s = csdn.openBox().replace('#title#', title).replace('#body#', body);
  27. div.innerHTML = s;
  28. csdn.shieldBody();
  29. document.body.appendChild(div);
  30. var un = csdn.getCookie("UN");
  31. if (un) {
  32. csdn.$('u').value = un;
  33. csdn.$('p').focus();
  34. }
  35. else {
  36. csdn.$('u').focus();
  37. }
  38. csdn.$('u').onkeypress =
  39. csdn.$('p').onkeypress = function (ev) {
  40. if (csdn.isEnter(ev)) {
  41. csdn.login();
  42. }
  43. };
  44. csdn.loginBack = callback;
  45. };
  46. csdn.closeLogin = function () {
  47. document.body.removeChild(csdn.$('csdn_divh'));
  48. document.body.removeChild(csdn.$('csdn_shield'));
  49. };
  50. csdn.shieldBody = function () {
  51. var shield = document.createElement("DIV");
  52. shield.id = "csdn_shield";
  53. var h1 = document.documentElement.clientHeight;
  54. var h2 = document.documentElement.scrollHeight;
  55. shield.style.height = Math.max(h1, h2) + "px";
  56. shield.style.filter = "alpha(opacity=0)";
  57. shield.style.opacity = 0;
  58. document.body.appendChild(shield);
  59. csdn.setOpacity = function (obj, opacity) {
  60. if (opacity >= 1) opacity = opacity / 100;
  61. try { obj.style.opacity = opacity; } catch (err) { }
  62. try {
  63. if (obj.filters.length > 0 && obj.filters("alpha")) {
  64. obj.filters("alpha").opacity = opacity * 150;
  65. } else {
  66. obj.style.filter = "alpha(opacity=\"" + (opacity * 150) + "\")";
  67. }
  68. } catch (err) { }
  69. };
  70. var c = 0;
  71. csdn.doAlpha = function () {
  72. c += 2;
  73. if (c > 20) { clearInterval(ad); return 0; }
  74. csdn.setOpacity(shield, c);
  75. };
  76. var ad = setInterval("csdn.doAlpha()", 1);
  77. };
  78. csdn.setStyle = function () {
  79. var lk = document.createElement("LINK");
  80. lk.type = "text/css";
  81. lk.rel = "stylesheet";
  82. lk.href = location.protocol + "//" + csdn.domain + "/content/loginbox/style.css?r=" + (new Date().getTime());
  83. var head = document.getElementsByTagName("head")[0];
  84. head.appendChild(lk);
  85. };
  86. csdn.isEnter = function (ev) {
  87. ev = ev || window.event;
  88. var code = (ev.keyCode || ev.which);
  89. return (code == 10 || code == 13);
  90. };
  91. csdn.getCookie = function (name) {
  92. var ck = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
  93. if (ck) return ck[2];
  94. else return null;
  95. };
  96. csdn.setCookie = function (name, value, expires) {
  97. if (expires) expires = '; expires=' + new Date(expires).toUTCString();
  98. else expires = '';
  99. var path = '; path=/';
  100. var domain = '; domain=' + document.domain.replace('www.', '');
  101. document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain].join('');
  102. }
  103. csdn.openBox = function () {
  104. var text =
  105. "<div class='boxbody'>#body#</div>"
  106. return text;
  107. };
  108. csdn.loginForm = function () {
  109. var fromurl = encodeURIComponent(location.href);
  110. var text = "<div class='csdn_loginbox' style='z-index: 100'>"
  111. + "<div class='login_content'>"
  112. + "<input name='close' type='button' class='close' onclick='javascript:csdn.closeLogin();return false;' />"
  113. + "<p class='point' id='sperr'></p>"
  114. + "<input name='user_id' id='u' type='text' class='user_id' placeholder='用户ID/注册邮箱' />"
  115. + "<input name='password' id='p' type='password' class='password' placeholder='密码'/ >"
  116. + "<label><p class='remember clearfix'><input name='checkbox' id='chkre' type='checkbox' value='checkbox' />记住我一周</p></label>"
  117. + "<div class='pw_lg'>"
  118. + "<a href='https://" + csdn.domain + "/account/forgotpassword' target='_blank' >忘记密码</a>|<a href='https://" + csdn.domain + "/account/register' target='_blank' class='pw_a'>注册</a>"
  119. + "</div>"
  120. + "<input name='button' type='button' onclick='javascript:csdn.login();return false;' value='登 录' class='login_bt'/>"
  121. + "<div class='lg_3 clearfix'>"
  122. + "<a href='https://" + csdn.domain + "/auth/baidu?from=" + fromurl + "' target='_blank' class='baidu'></a>"
  123. + "<a href='https://" + csdn.domain + "/auth/LinkedIn?from=" + fromurl + "' target='_blank' class='LinkedIn'></a>"
  124. + "<a href='https://" + csdn.domain + "/auth/Github?from=" + fromurl + "' target='_blank' class='github'></a>"
  125. + "<a href='https://" + csdn.domain + "/auth/google?from=" + fromurl + "' target='_blank' class='google'></a>"
  126. + "<a href='https://" + csdn.domain + "/auth/qq?from=" + fromurl + "' target='_blank' class='qq'></a>"
  127. + "<a href='https://" + csdn.domain + "/auth/sinat?from=" + fromurl + "' target='_blank' class='weibo'></a>"
  128. + "第三方登录:"
  129. + "</div></div>"
  130. + "<iframe frameborder='no' allowtransparency='yes' style='position: absolute; width:100%; height: 311px; left: 0; top: 100px; border: 0; z-index: -1;'>"
  131. + "</div>";
  132. return text;
  133. };
  134. csdn.login = function () {
  135. if (csdn.doing) return;
  136. var u = csdn.$('u');
  137. var p = csdn.$('p');
  138. var er = csdn.$('sperr');
  139. if (!u.value) {
  140. er.innerHTML = '* 请输入用户名/邮箱。';
  141. return;
  142. }
  143. if (!p.value) {
  144. er.innerHTML = '* 请输入密码。';
  145. return;
  146. }
  147. csdn.doing = true;
  148. er.innerHTML = '正在登录...';
  149. var url = location.protocol + '//' + csdn.domain + '/ajax/accounthandler.ashx';
  150. var data = 't=log&u=' + encodeURIComponent(u.value)
  151. + '&p=' + encodeURIComponent(p.value)
  152. + '&remember=' + (csdn.$('chkre').checked ? 1 : 0)
  153. + '&callback=csdn.login_back'
  154. + '&r=' + (new Date().getTime());
  155. csdn.post(url + '?' + data);
  156. };
  157. csdn.login_back = function (data) {
  158. if (data.status) {
  159. var userName = data.data.userName;
  160. var userInfo = data.data.encryptUserInfo;
  161. var exp = csdn.$('chkre').checked ? 7 : 0;
  162. var url = location.protocol + '//' + csdn.domain + '/home/ssoindex'
  163. + '?userName=' + encodeURIComponent(userName)
  164. + '&userInfo=' + encodeURIComponent(userInfo)
  165. + '&exp=' + exp;
  166. csdn.load_frm(url, csdn.login_ok(data));
  167. } else {
  168. if (data.error.indexOf("激活") > -1) {
  169. csdn.$('sperr').innerHTML = '* 账户未激活,请先<a href="https://' + csdn.domain + '/account/active?from=' + encodeURIComponent(location + '') + '" target=_blank>激活</a>。';
  170. } else {
  171. csdn.$('sperr').innerHTML = '* ' + data.error;
  172. }
  173. csdn.doing = false;
  174. }
  175. };
  176. csdn.login_ok = function (data) {
  177. csdn.doing = false;
  178. csdn.$('sperr').innerHTML = '<span style="color:green;">登录成功!</span>';
  179. if (csdn.loginBack) csdn.loginBack(data);
  180. csdn.closeLogin();
  181. };
  182. csdn.post = function (url, callback) {
  183. var sc = document.createElement("script");
  184. sc.type = 'text/javascript';
  185. sc.async = true;
  186. sc.src = url;
  187. if (callback) {
  188. if (sc.onload) sc.onload = callback;
  189. else sc.onreadystatechange = callback;
  190. }
  191. document.body.appendChild(sc);
  192. };
  193. csdn.arr_isloaded = [];
  194. csdn.load_frm = function (url, loaded) {
  195. var idx = csdn.arr_isloaded.length;
  196. csdn.arr_isloaded[idx] = false;
  197. var frm = document.createElement("iframe");
  198. frm.style.width = '1px';
  199. frm.style.height = '1px';
  200. frm.style.visibility = 'hidden';
  201. frm.src = url;
  202. if (loaded) {
  203. var call = function () {
  204. if (!csdn.arr_isloaded[idx]) {
  205. csdn.arr_isloaded[idx] = true;
  206. loaded();
  207. }
  208. };
  209. if (frm.onreadystatechange) {
  210. frm.onreadystatechange = call;
  211. } else {
  212. frm.onload = call;
  213. }
  214. setTimeout(call, 5000);
  215. }
  216. document.body.appendChild(frm);
  217. };
  218. /*加载样式表单*/
  219. (function () {
  220. if (typeof jQuery != 'undefined') {
  221. jQuery(csdn.setStyle);
  222. } else {
  223. var ld = window.onload;
  224. window.onload = function () {
  225. if (ld) ld();
  226. csdn.setStyle();
  227. };
  228. }
  229. })();