标签:popup repeat otto html you ssd ber type hand
意外看到一段搜狗浏览器的代码,感觉搜狗的某些程序员躁动的很啊。。。
还好我的网站没有这事,要不用个浏览器还挨骂,也是够了。。。
“
有些傻逼网站点登陆竟然不是切换登录div的显示与否,而是直接把登录div干掉,下次再生成一个。服了!
”
这傻逼说的干脆。
“
为了用户教育增加的状态。。。
”
貌似对“用户教育”很不满。
P.S. 仅供消遣娱乐用。
脚本是这个:_se_secureinputjs_.html
(function () { if (window.__sogou_secure_input) { window.__sogou_secure_input.check(); return; } //私有变量 var inputs = []; var timers = []; // timer太多了,用一个数组,新的把旧的顶掉 var timerId = null; var divs = []; // 有些傻逼网站点登陆竟然不是切换登录div的显示与否,而是直接把登录div干掉,下次再生成一个。服了! var lastCaretInput = { input: null, selection: { start: 0, end: 0 } }; var PADDING_RIGHT = 5; var IMAGE_WIDTH = 18; var IMAGE_HEIGHT = 14; var STYLE_TEXT = "margin: 0px; padding: 0px; width: " + IMAGE_WIDTH + "px; height:" + IMAGE_HEIGHT + "px; "; var container = null; //Amax: min-width: 0;在这里是为了fix ie7中的一个hasLayout相关的bug,参见http://www.satzansatz.de/cssd/onhavinglayout.html //text-align: left是对应position:absolute的left竟然受text-align的影响。。。 var CONTAINER_STYLE_TEXT = "position: relative; min-width: 0; margin: 0px; padding: 0px; z-index: 2147482647; text-align: left;"; var log = (function () { return function (msg) { window.external.secureinputdebug(msg); }; })(); var addEvent = (function () { if (window.addEventListener) return function (elem, type, func) { elem.addEventListener(type, func, false); }; else return function (elem, type, func) { elem.attachEvent("on" + type, func); }; })(); function clearSecureInputs() { for (var i = 0, len = inputs.length; i < len; ++i) { inputs[i].__sogou_secure_input = null; } inputs = []; divs = []; container = null; } function injectSogouSecureInput() { try { if (typeof (window.__sogou_secure_input) === "undefined") window.__sogou_secure_input = {}; window.__sogou_secure_input.check = function () { if (timers.length != 0) window.clearTimeout(timerId); timers = [10, 10, 100, 100, 1000, 1000]; timerId = setTimeout(checkSogouSecureInput, 10); }; window.__sogou_secure_input.getInput = function (id) { return inputs[id]; }; window.__sogou_secure_input.setDriverState = function (state) { setDriverState(state); }; } catch (e) { log("in injectSogouSecureInput: " + e.message); } } function isVisible(elem) { try { var rect = elem.getBoundingClientRect(); if (rect.left === 0 || rect.left === rect.right) return false; var currentElem = document.elementFromPoint(rect.right - 5 - IMAGE_WIDTH - 1, (rect.top + rect.bottom) / 2); if (currentElem === elem) return true; return false; } catch (e) { return false; } } var isIE7 = (function () { var agent = navigator.userAgent; return agent.indexOf("MSIE 7.0") !== -1 && agent.indexOf("Trident") === -1; } ()); function getZoomFactor() { try { if (isIE7) { var body = document.body, r = body.getBoundingClientRect(); return (r.right - r.left) / body.offsetWidth; } if (screen.deviceXDPI) return screen.deviceXDPI / screen.logicalXDPI; return 1; } catch (e) { return 1; } } var getPos = function (el) { var left = 0, top = 0, right = el.offsetWidth, //默认元素可见,对于本应用而言可以这么写 bottom = el.offsetHeight; //默认元素可见,对于本应用而言可以这么写 while (el.offsetParent) {//是使用el.offsetParent还是使用el.parentNode left += el.offsetLeft; top += el.offsetTop; el = el.offsetParent; } right += left; bottom += top; return { left: left, top: top, right: right, bottom: bottom }; }; function getInputSelection(el) { var start = 0, end = 0, normalizedValue, range, textInputRange, len, endRange; range = document.selection.createRange(); if (range && range.parentElement() == el) { len = el.value.length; normalizedValue = el.value.replace(/\r\n/g, "\n"); // Create a working TextRange that lives only in the input textInputRange = el.createTextRange(); textInputRange.moveToBookmark(range.getBookmark()); // Check if the start and end of the selection are at the very end // of the input, since moveStart/moveEnd doesn‘t return what we want // in those cases endRange = el.createTextRange(); endRange.collapse(false); if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) { start = end = len; } else { start = -textInputRange.moveStart("character", -len); start += normalizedValue.slice(0, start).split("\n").length - 1; if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) { end = len; } else { end = -textInputRange.moveEnd("character", -len); end += normalizedValue.slice(0, end).split("\n").length - 1; } } } return { start: start, end: end }; } function setCaretToInput(input) { input.focus(); if (lastCaretInput.selection.start !== -1) { var range = input.createTextRange(); range.collapse(true); range.moveEnd(‘character‘, lastCaretInput.selection.end); range.moveStart(‘character‘, lastCaretInput.selection.start); range.select(); } } function insertAfter(newElem, prevSibling) { var parent = prevSibling.parentNode; var nextSibling = prevSibling.nextSibling; if (nextSibling) { parent.insertBefore(newElem, nextSibling); } else { parent.appendChild(newElem); } } function getStyleNumber(elem, key) { var iStyle = (+elem.currentStyle[key].slice(0, -2)); if (isNaN(iStyle)) return 0; return iStyle; } function createClickHandler(input) { var index = 0; if (input.__sogou_secure_input) { for (var i = 0, len = inputs.length; i < len; ++i) { if (inputs[i] === input) index = i; } } else { index = inputs.length; inputs[index] = input; } log("createClickHandler"); input = null; // to prevent Memory Leak in IE return function (event) { try { log("ClickHandler"); var input = inputs[index]; if (!input) return; setCaretToInput(input); var rect = input.getBoundingClientRect(); var scrLeft = window.screenLeft; var scrTop = window.screenTop; var factor = isIE7 ? 1 : getZoomFactor(); if (lastCaretInput.input === input) { window.external.popupsecureinput(window, index, (scrLeft + rect.left) * factor, (scrTop + rect.top) * factor, (scrLeft + rect.right) * factor, (scrTop + rect.bottom) * factor, lastCaretInput.selection.start, lastCaretInput.selection.end, driverState); } else { log("lastCaretInput.input != input"); window.external.popupsecureinput(window, index, (scrLeft + rect.left) * factor, (scrTop + rect.top) * factor, (scrLeft + rect.right) * factor, (scrTop + rect.bottom) * factor, -1, -1, driverState); } } catch (e) { log("in click handler: " + e.message); } if (event.stopPropagation) { event.stopPropagation(); } else if (window.event) { window.event.cancelBubble = true; } if (event.preventDefault) { event.preventDefault(); } return false; } } function recordLastCaret(elem) { lastCaretInput.input = elem; lastCaretInput.selection = getInputSelection(elem); } function setSelectionHandler() { var elem = window.event.srcElement; recordLastCaret(elem); } //为了用户教育增加的状态。。。 var BACKGORUND_STYLE_NORMAL = "url(‘https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/secureinput/icon.png‘) left top no-repeat"; var BACKGORUND_STYLE_DRIVER_ERROR = "url(‘https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/secureinput/icon_driver_error.png‘) left top no-repeat"; var BACKGORUND_STYLE_REMOTE_ENV = "url(‘https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/secureinput/icon_remote_env.png‘) left top no-repeat"; var State_NoDriver = 0; var State_Normal = 1; var State_DriverError = 2; var State_RemoteEnv = 3; var State_DriverError_RepairFailed = 4; var driverState = 0; function setDriverStateForInputDiv(div) { switch (driverState) { case State_NoDriver: case State_DriverError_RepairFailed: div.setAttribute("title", "点击可打开软键盘输入密码,输入更安全。"); div.style.background = BACKGORUND_STYLE_NORMAL; break; case State_Normal: div.setAttribute("title", "搜狗键盘安全服务正在保护您安全输入密码。"); div.style.background = BACKGORUND_STYLE_NORMAL; break; case State_DriverError: div.setAttribute("title", "搜狗键盘安全服务被破坏,点击按钮修复。"); div.style.background = BACKGORUND_STYLE_DRIVER_ERROR; break; case State_RemoteEnv: div.setAttribute("title", "您似乎处于远程桌面下,请注意输入安全"); div.style.background = BACKGORUND_STYLE_REMOTE_ENV; break; } } function setDriverState(state) { driverState = state; for (var i = 0, len = divs.length; i < len; ++i) { setDriverStateForInputDiv(divs[i]); } } function createSecureInputDiv(input) { if (!input) return; var div = document.createElement("div"); setDriverStateForInputDiv(div); container.appendChild(div); div.__input__ = input; divs.push(div); addEvent(div, "click", createClickHandler(input)); addEvent(input, "click", setSelectionHandler); addEvent(input, "select", setSelectionHandler); addEvent(input, "keyup", setSelectionHandler); addEvent(input, "keyup", checkSogouSecureInput); addEvent(window, "scroll", checkSogouSecureInput); addEvent(window, "click", function () { setTimeout(checkSogouSecureInput, 0); }); input.__sogou_secure_input = div; //fix一个weibo only的问题 if (window.location.host.indexOf("weibo.com") !== -1) input.fireEvent("onblur"); } function checkSogouSecureInput() { //alert("checksogouinput"); try { if (document.body) { if (container === null) { // 如果没有任何可以注入的inputs,则直接返回 var count = 0; var inputs = document.getElementsByTagName("input"); for (var i = 0, len = inputs.length; i < len; ++i) { if (inputs[i].type === "password" && !inputs[i].readOnly && isVisible(inputs[i])) { ++count; } } if (count === 0) { if (timers.length !== 0) { timerId = setTimeout(checkSogouSecureInput, timers.shift()); } return; } container = document.createElement("div"); container.setAttribute("id", "sogou_secure_inputs_container"); document.body.appendChild(container); container.style.cssText = CONTAINER_STYLE_TEXT; } // IEbug, 此时计算比较准确,当把所有div都删除后,位置可能会变化 var bContainerOnDocument = true; try { var rectContainer = container.getBoundingClientRect(); if (rectContainer.left === 0 && rectContainer.top === 0) bContainerOnDocument = false; } catch (e) { bContainerOnDocument = false; } if (!bContainerOnDocument) { clearSecureInputs(); if (timers.length !== 0) { timerId = setTimeout(checkSogouSecureInput, timers.shift()); } return; } for (var i = 0, len = divs.length; i < len; ++i) { if (!isVisible(divs[i].__input__)) { divs[i].style.display = "none"; } } inputs = document.getElementsByTagName("input"); for (var i = 0, len = inputs.length; i < len; ++i) { if (inputs[i].type === "password" && !inputs[i].readOnly) { var input = inputs[i]; if (!input.__sogou_secure_input) createSecureInputDiv(input); var div = input.__sogou_secure_input; if (isVisible(input)) { var rect = input.getBoundingClientRect(); var left = rect.left - rectContainer.left; var top = rect.top - rectContainer.top; var width = rect.width || (rect.right - rect.left); if (isIE7) { var factor = getZoomFactor(); left /= factor; top /= factor; width /= factor; } var offsetTop = Math.floor((rect.bottom - rect.top - IMAGE_HEIGHT) / 2); offsetTop = offsetTop > 0 ? offsetTop : 0; top = top + offsetTop; left = left + width - (IMAGE_WIDTH + PADDING_RIGHT); if (!div.__state__ || !div.__state__.visible || div.__state__.left !== left || div.__state__.top !== top) { div.style.cssText = "position:absolute; left: " + left + "px; top: " + top + "px; display: block;" + STYLE_TEXT; setDriverStateForInputDiv(div); div.__state__ = { visible: true, left: left, top: top }; } } else { div.style.cssText = "position:absolute; display: none;" + STYLE_TEXT; div.__state__ = { visible: false }; } } } } } catch (e) { log("checkSogouSecureInput: " + e.message); } if (timers.length !== 0) { timerId = setTimeout(checkSogouSecureInput, timers.shift()); } } injectSogouSecureInput(); window.__sogou_secure_input.check(); addEvent(window, "resize", window.__sogou_secure_input.check); addEvent(window, "unload", function () { // to prevent memory leak inputs = null; container = null; divs = null; }) })(); var jsNode = document.getElementById("sbid-secureinput");if (jsNode){jsNode.parentNode.removeChild(jsNode);}
少于150字的随笔不允许发布到网站首页
少于150字的随笔不允许发布到网站首页
少于150字的随笔不允许发布到网站首页
少于150字的随笔不允许发布到网站首页
少于150字的随笔不允许发布到网站首页
少于150字的随笔不允许发布到网站首页
少于150字的随笔不允许发布到网站首页
少于150字的随笔不允许发布到网站首页
少于150字的随笔不允许发布到网站首页
少于150字的随笔不允许发布到网站首页
标签:popup repeat otto html you ssd ber type hand
原文地址:http://www.cnblogs.com/mahongbiao/p/7685027.html