您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Append share button in all pages.
// ==UserScript== // @name share button is always beside // @namespace http://www.sharkpp.net/ // @version 0.2 // @description Append share button in all pages. // @author sharkpp // @copyright 2016, sharkpp // @license MIT License // @include * // @exclude https://www.google.co.jp/_/chrome/newtab* // ==/UserScript== (function() { 'use strict'; var NS = 'sns-share-button-for-all-pages-'; if (window != parent || // exit when if loaded in iframe NS+'share-popup' == window.name) { // exit when if call from popup windows return; } var evaluate_ = function (xpath, resultOnce) { resultOnce = 'undefined' == typeof resultOnce ? false : resultOnce; var items = document.evaluate(xpath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); return resultOnce ? (items.snapshotLength ? items.snapshotItem(0) : null) : items; }; var applyStyles = function (elm, styles, overwriteStyles) { overwriteStyles = overwriteStyles || {}; for (var name in styles) { elm.style[name] = overwriteStyles[name] || styles[name]; } }; var baseElmStyles = { inital: { top: '10px', left: '-1px', width: '30px', height: '50px', borderRadius: '0 2px 2px 0', padding: '2px', opacity: '0.6', transition: '' }, initalOpen: { left: '10px', width: 'auto', height: 'auto', borderRadius: '3px', padding: '6px', opacity: '1', transition: '' }, stick: { top: '-1px', left: '-1px', width: '50px', height: '50px', borderRadius: '0 0 50px 0', padding: '2px', opacity: '0.6', transition: '' }, stickOpen: { top: '10px', left: '10px', width: 'auto', height: 'auto', borderRadius: '3px', padding: '6px', opacity: '1', transition: '' }, }; var panelOpenElmStyles = { inital: { display: 'block', width: '100%', height: '44px', lineHeight: '44px', fontSize: '20px', transform: '', }, initalOpen: { display: 'none', }, stick: { display: 'block', width: '35px', height: '35px', lineHeight: '35px', fontSize: '30px', transform: 'rotate(45deg)', }, stickOpen: { display: 'none', }, }; var panelCloseElmStyles = { inital: { display: 'none', }, initalOpen: { display: 'block', width: '100%', height: '20px', lineHeight: '20px', fontSize: '20px', transform: '', }, stick: { display: 'none', }, stickOpen: { display: 'block', width: '100%', height: '20px', lineHeight: '20px', fontSize: '20px', transform: '', }, }; var shareElmStyles = { inital: { display: 'none', }, initalOpen: { display: 'block', }, stick: { display: 'none', }, stickOpen: { display: 'block', }, }; var baseElm = document.createElement('div'); baseElm.id = NS + 'base'; baseElm.style.cssText = [ 'box-sizing: border-box;', 'width: 0;', 'height: 0;', 'position: fixed;', 'background-color: #fff;', 'border: 1px solid #ccc;', 'border-radius: 0 2px 2px 0;', 'z-index: 2147483647;', // for Youtube ].join(" "); var panelOpenElm = document.createElement('div'); panelOpenElm.innerHTML = '»'; panelOpenElm.style.cssText = [ 'display: block;', 'margin: 0;', 'padding: 0;', 'top: 0;', 'left: 0;', 'vertical-align: middle;', 'text-align: center;', 'pointer-events: none;' ].join(" "); var panelCloseElm = document.createElement('div'); panelCloseElm.innerHTML = '«'; panelCloseElm.style.cssText = [ 'display: none;', 'margin: 0;', 'padding: 0;', 'top: 0;', 'left: 0;', 'vertical-align: middle;', 'text-align: center;', 'pointer-events: none;' ].join(" "); var shareElm = document.createElement('div'); shareElm.style.cssText = [ ].join(" "); var overlayElm = document.createElement('div'); overlayElm.id = NS+'overlay'; overlayElm.style.cssText = [ 'display: none;', 'position: fixed;', 'width: 100%;', 'height: 100%;', 'left: 0;', 'top: 0;', 'opacity: 1;', ].join(" "); baseElm.appendChild(shareElm); baseElm.appendChild(panelOpenElm); baseElm.appendChild(panelCloseElm); document.body.appendChild(overlayElm); var onDocumentScroll = function(){ var prevTop = parseInt(baseElm.style.top); var top = Math.max(100 - document.body.scrollTop, 10); var isSticky = top <= 10; var state = isSticky?'stick':'inital'; var transition = 10 == prevTop || 10 == top ? 'all 300ms 0s ease' : ''; if (!isSticky) { applyStyles(baseElm, baseElmStyles[state], { top: ''+top+'px', transition: transition }); } else { applyStyles(baseElm, baseElmStyles[state], { transition: transition }); } applyStyles(panelOpenElm, panelOpenElmStyles[state]); applyStyles(panelCloseElm, panelCloseElmStyles[state]); applyStyles(shareElm, shareElmStyles[state]); overlayElm.style.display = 'none'; }; var selectedText = '', selectedRange; var onSharePanelShow = function () { if ((selectedText = window.getSelection().toString())) { selectedText = '『' + selectedText + '』 '; } var top = Math.max(100 - document.body.scrollTop, 10); var isSticky = top <= 10; var state = (isSticky?'stick':'inital')+'Open'; applyStyles(baseElm, baseElmStyles[state], { transition: 'all 300ms 0s ease' }); applyStyles(panelOpenElm, panelOpenElmStyles[state]); applyStyles(panelCloseElm, panelCloseElmStyles[state]); applyStyles(shareElm, shareElmStyles[state]); overlayElm.style.display = 'block'; }; var onSharePanelHide = function () { var top = Math.max(100 - document.body.scrollTop, 10); var isSticky = top <= 10; var state = (isSticky?'stick':'inital'); applyStyles(baseElm, baseElmStyles[state], { top: isSticky ? baseElmStyles.stick.top : ''+top+'px', transition: 'all 300ms 0s ease' }); applyStyles(panelOpenElm, panelOpenElmStyles[state]); applyStyles(panelCloseElm, panelCloseElmStyles[state]); applyStyles(shareElm, shareElmStyles[state]); overlayElm.style.display = 'none'; }; baseElm.addEventListener('mousedown', function () { selectedRange = 0 < window.getSelection().rangeCount ? window.getSelection().getRangeAt(0) : null; }); baseElm.addEventListener('click', function () { if (selectedRange) { window.getSelection().removeAllRanges(); window.getSelection().addRange(selectedRange.cloneRange()); } ('none' != panelOpenElm.style.display ? onSharePanelShow : onSharePanelHide)(); }); overlayElm.addEventListener('click', onSharePanelHide); var title = (document.getElementsByTagName('title')[0]||{}).innerHTML||''; var shareInfo = { twitter: { popup: true, caption: 'Twitter でつぶやく', url: 'http://twitter.com/share?text={seltext}{title}&url={url}' }, facebook: { popup: true, caption: 'Facebookで共有', url: 'http://www.facebook.com/sharer.php?u={url}&t={title}' }, hatena: { popup: true, caption: 'はてなブックマーク', url: 'http://b.hatena.ne.jp/entry/panel/?url={url}&btitle={title}' }, pocket: { popup: true, caption: 'Pocketに追加', url: 'http://getpocket.com/edit?url={url}&title={title}' }, googleplus: { popup: true, caption: 'Google+で共有', url: 'https://plus.google.com/share?url={url}' }, mail: { popup: false, caption: 'メール送信', url: 'mailto:?subject={title}&body={url}%0D%0A{seltext}' }, }; for (var service in shareInfo) { var shareLink = shareInfo[service].url .replace('{url}', encodeURIComponent(location.href)) .replace('{seltext}', encodeURIComponent(selectedText || '')) .replace('{title}', encodeURIComponent(title || '')); var button = document.createElement('div'); button.style.cssText = [ 'margin-bottom: 5px;', ].join(" "); var buttonLink = document.createElement('a'); buttonLink.innerHTML = shareInfo[service].caption; if (!shareInfo[service].popup) { buttonLink.href = shareLink; } else { buttonLink.href = 'javascript:void(0);'; buttonLink.onclick = function(shareLink){ window.open(shareLink, NS+'share-popup', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,width=640,height=480'); }.bind(null, shareLink); } buttonLink.style.cssText = [ 'position: relative;', 'display: inline-block;', 'box-sizing: border-box;', 'text-align: center;', 'background-color: #1a9cbc;', 'border-radius: 4px;', 'color: #fff;', 'line-height: 52px;', '-webkit-transition: none;', 'transition: none;', 'box-shadow: 0 3px 0 #0e738c;', 'text-shadow: 0 1px 1px rgba(0, 0, 0, .3);', 'width: 100%;', 'height: 100%;', 'line-height: 100%;', 'padding: 5px;', 'text-decoration: none;', ].join(" "); buttonLink.onmouseover = function () { this.style.top = '0px'; this.style.backgroundColor = '#31aac8'; this.style.boxShadow = '0 3px 0 #2388a1'; }; buttonLink.onmouseout = function () { this.style.top = '0px'; this.style.backgroundColor = '#1a9cbc'; this.style.boxShadow = '0 3px 0 #0e738c'; }; buttonLink.onmousedown = function () { this.style.top = '3px'; this.style.boxShadow = 'none'; }; buttonLink.onmouseup = function () { this.style.top = '0px'; this.style.backgroundColor = '#1a9cbc'; this.style.boxShadow = '0 3px 0 #0e738c'; }; button.appendChild(buttonLink); shareElm.appendChild(button); } document.body.appendChild(baseElm); document.addEventListener('scroll', onDocumentScroll); onSharePanelHide(); onDocumentScroll(); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址