Greasy Fork is available in English.

页内书签

页内书签脚本

// ==UserScript==
// @name 页内书签
// @namespace www.jjwt.com/
// @description 页内书签脚本
// @include *
// @version 1
// @grant none
// ==/UserScript==
//创建样式表
function jjwtAddBookMark() {
	var ls = window.localStorage;
    if (arguments.length == 2) {
		return addBm(arguments[0],arguments[1]);
    } 
    else {
        var bookMarkName = prompt('请输入书签名', '');
        var currentYPostion = window.pageYOffset;
		if (bookMarkName != null && bookMarkName != '') {
			addBm(bookMarkName,currentYPostion,1);
		}		
    }
}
function addBm(i,j,k){
	var url = location.pathname;
	var ul = document.getElementById('jjwtBookMarkUl');
	var txt = document.createElement('input');
	txt.type = 'text';
	txt.value = i;
	var btn = document.createElement('input');
	btn.type = 'button';
	btn.value = 'Go';
	btn.setAttribute("data-top",j);
	btn.onclick = function (event) {
		window.scrollTo(0, event.target.getAttribute("data-top"));
	};
	var li = document.createElement('li');
	li.appendChild(txt);
	li.appendChild(btn);
	ul.appendChild(li);
	if(k){
		var lsArray = localStorage["bmls"] ? JSON.parse(localStorage["bmls"]) : {};
		if(!lsArray[url]){
			lsArray[url] = [];
		}
		lsArray[url].push([i,j]);
		localStorage["bmls"] = JSON.stringify(lsArray);
	}
}

function loadLS(ls){
	var ul = document.getElementById('jjwtBookMarkUl');
	ls.forEach(function(i){
        var txt = document.createElement('input');
        txt.type = 'text';
        txt.value = i[0];
        var btn = document.createElement('input');
        btn.type = 'button';
        btn.value = 'Go';
		btn.setAttribute("data-top",i[1]);
        btn.onclick = function (event) {
            window.scrollTo(0, event.target.getAttribute("data-top"));
        };
        var li = document.createElement('li');
        li.appendChild(txt);
        li.appendChild(btn);
        ul.appendChild(li);
	});
}

function jjwtInitBookMark() {
    jjwtAddStyle();
    if (!document.getElementById('jjwtBookMark')) {
        var bookmark_div = document.createElement('div');
        bookmark_div.id = 'jjwtBookMark';
        bookmark_div.onmouseover = mOver;
        bookmark_div.onmouseout = mOout;
        var div_nav = document.createElement('div');
        div_nav.id = 'jjwtBookMarkNav';
        var div_main = document.createElement('div');
        div_main.id = 'jjwtBookMarkMain';
        //增加 "页内标签"
        var h3 = document.createElement('h3');
        h3.className = 'jjwtBookMarkH3';
        h3.innerHTML = '页内标签';
        div_main.appendChild(h3);
        var h3a = document.createElement('h3');
        h3a.className = 'jjwtBookMarkH3';
        h3a.innerHTML = '页内标签';
        div_nav.appendChild(h3a);
        // 增加 "添加书签"按钮
        var btn = document.createElement('input');
        btn.type = 'button';
        btn.value = '增加书签';
        btn.onclick = jjwtAddBookMark;
        div_main.appendChild(btn);
        var ul = document.createElement('ul');
        ul.id = 'jjwtBookMarkUl';
        div_main.appendChild(ul);
        bookmark_div.appendChild(div_nav);
        bookmark_div.appendChild(div_main);
        //增加默认标签
        document.body.appendChild(bookmark_div);
        jjwtAddBookMark('页面顶部', 0);
		var ls = window.localStorage;
		var bmls = window.localStorage.bmls;
		if(bmls){
			var url = location.pathname;
			var bmls = JSON.parse(bmls);
			loadLS(bmls[url]);
		}
	};
}
function jjwtAddStyle() {
    if (!document.getElementById('jjwtBookMarkStyle') && window.self == window.top) {
        //先检查要建立的样式表ID是否存在,防止重复添加
        var style = document.createElement('style');
        style.type = 'text/css';
        style.id = 'jjwtBookMarkStyle';
        style.innerHTML = '#jjwtBookMark{' +
        'display:block;' +
        'position:fixed;' +
        'right:0px;' +
        'z-index:99999;' +
        'width:20px;' +
        'overflow:hidden;' +
        'top:220px;' +
        'visibility:visible;' +
        'font-size:12px;' +
        'background-color:#F1FEDD;' +
        'text-align:left !important;' +
        'word-break:break-all;' +
        '} ' +
        '#jjwtBookMarkNav{' +
        'width: 10px;' +
        'float: left;' +
        'word-break:break-all;' +
        '} ' +
        '#jjwtBookMarkMain{' +
        'float: left;' +
        'position: absolute;' +
        'left: 20px;' +
        'word-break:break-all;' +
        '} ' +
        '.jjwtBookMarkH3{' +
        'width: 50%;' +
        'cursor: pointer;' +
        'outline: 0px none;' +
        'text-index: 0.5em;' +
        'border-top: 1px solid #FBFBFB;' +
        'border-bottom: 1px solid #F2F1F1;' +
        'background-color: #F6F6F6;' +
        'float: left;' +
        'padding: 0px;' +
        'margin: 0px;' +
        'word-break:break-all;' +
        '} ' +
        '#jjwtBookMarkUl{' +
        'width: 90%;' +
        'float: left;' +
        'padding: 8px 0px;' +
        'margin-left: 2px;' +
        'overflow: hidden;' +
        'list-style: none outside none;' +
        'font-size:12px;' +
        'text-align:left !important;' +
        '} ' +
        '.jjwtBookMarkLi{' +
        'width: 47%;' +
        'height: 26px;' +
        'float: left;' +
        'margin: 2px;' +
        'list-style: none outside none;' +
        'padding: 0px;' +
        '} ';
        document.body.appendChild(style);
    };
};
function mOver() {
    var bm = document.getElementById('jjwtBookMark');
	bm.style.width = '220px';
    bm.style.height = '500px';
}
function mOout() {
	var bm = document.getElementById('jjwtBookMark');
    bm.style.width = '20px';
    bm.style.height = '80px';
}
jjwtInitBookMark();