gpt4 book ai didi

javascript - 用户脚本在 Chrome 上的 Tampermonkey 中有效,但在 Firefox 上的 Greasemonkey 中无效

转载 作者:行者123 更新时间:2023-12-03 08:44:19 30 4
gpt4 key购买 nike

我在 Firefox 上的 Greasemonkey 和 Chrome 上的 Tampermonkey 中使用用户脚本已有一年半多了。它在每个网页上添加了一个滚动到顶部按钮。我尝试添加另一个站点以包含在 Greasemonkey 中,但后来它似乎破坏了它。现在,滚动到顶部按钮不会显示在 Firefox 中的任何网站上,但完全相同的用户脚本在 Tampermonkey 上的 Chrome 中工作没有问题。我没有创建这个脚本。我在 Userscripts.org 崩溃之前从它那里得到了它。下面是脚本。有谁知道脚本中可能需要更改哪些内容才能使其再次与 Greasemonkey 兼容?

我在 xUbuntu 和 Greasemonkey 3.4.1 上使用 Firefox 41.0。我的 Chrome 是 45.0.2454.101,Tampermonkey 是 3.11。

// ==UserScript==
// @name Scroll To Top Button
// @version v1.3.2
// @include http://*
// @include https://*
// ==/UserScript==
(function(global) {
if(global !== window) return;

function _(id) {
return document.getElementById(id);
}

function bind(context, name) {
return function() {
return context[name].apply(context, arguments);
}
}

global.addEventListener('scroll', scrollHandler, false);

function scrollHandler() {
!scroll.isScrolling && ((scroll.getScrollY() > 0) ? scroll.showBtn() : scroll.hideBtn());
}

var scroll = {
__scrollY : 0,
isScrolling : false, //is scrolling
imgBtn : null,
isBtnShow : false,
pageHeight : 0,
speed : 0.75,
init : function() {
var document = global.document,
div = document.createElement('div'),
css;
css = '#__scrollToTop{font:12px/1em Arial,Helvetica,sans-serif;margin:0;padding:0;position:fixed;display:none;left:92%;top:80%;text-align:center;z-index:999999; width:74px;height:50px;' +
'cursor:pointer;opacity:0.5;padding:2px;}' +
'#__scrollToTop:hover{opacity:1;}' +
'#__scrollToTop span.__scroll__arrow{ position:relative;top:20px;background:none repeat scroll 0 0 #eee;border-style:solid; border-width:1px;' +
'border-color:#ccc #ccc #aaa; border-radius:5px;color:#333;font-size:36px;padding:5px 8px 2px;}' +
' #__scroll__scroll{height:50px;width:50px;float:left;z-index:100001;position:absolute;} ' +
'#__scroll__util{font:12px/1em Arial,Helvetica,sans-serif;text-align:center;height:44px;width:20px;float:right;position:absolute;left:54px;z-index:100000; ' +
'border-style:solid; border-width:1px;border-color:#ccc #ccc #aaa; border-radius:2px;top:5px;display:none;}' +
'#__scroll__util span{display:block;height:18px;padding-top:4px;text-align:center;text-shadow:2px 2px 2px #888;font-size:16px;} ' +
'#__scroll__util span:hover{background-color: #fc9822;}';

GM_addStyle(css);

div.id = '__scrollToTop';
div.title = 'Back To Top';
div.innerHTML = '<div id="__scroll__scroll">' +
'<span class="__scroll__arrow">▲</span>' +
'</div>' +
'<div id="__scroll__util">' +
'<span name="__hide" title="Hide the Button">x</span>' +
'<span name="__bottom" title="Scroll to the bottom">▼</span>' +
'</div>';
document.body.appendChild(div);
div.addEventListener('mousedown', bind(this, 'control'),false);
div.addEventListener('mouseover', bind(this, 'showUtil'),false);
div.addEventListener('mouseout', bind(this, 'hideUtil'),false);

this.util = _('__scroll__util');
this.pageUtil = _('__scroll__page');
this.pageHeight = document.body.scrollHeight;
return this.imgBtn = div;

},
getImgBtn : function() {
return this.imgBtn || this.init();
},
show : function(elem) {
elem.style.display = 'block';
},
hide : function(elem) {
elem.style.display = 'none';
},
showBtn : function() {
if(this.isBtnShow) return;
this.isBtnShow = true;
this.show(this.getImgBtn());
},
hideBtn : function() {
if(!this.isBtnShow) return;
this.isBtnShow = false;
this.hide(this.getImgBtn());
},
getScrollY : function() {
//this piece of code is from John Resig's book 'Pro JavaScript Techniques'
var de = document.documentElement;
return this.__scrollY = (self.pageYOffset ||
( de && de.scrollTop ) ||
document.body.scrollTop);
},
closeBtn : function(event) {
event.preventDefault();
event.stopPropagation();
this.hideBtn();
window.removeEventListener('scroll', scrollHandler, false);
},
showUtil : function() {
this.show(this.util);
},
hideUtil : function() {
this.hide(this.util);
},
scroll : function() {
if(!this.isScrolling) {
this.isScrolling = true;
}
var isStop = false,
scrollY = this.__scrollY;
if(this.direction === 'top') {
isStop = scrollY > 0;
this.__scrollY = Math.floor(scrollY * this.speed);
} else {
isStop = scrollY < this.pageHeight;
this.__scrollY += Math.ceil((this.pageHeight - scrollY) * (1 - this.speed)) + 10;
}
this.isScrolling = isStop;
window.scrollTo(0, this.__scrollY);
isStop ? setTimeout(bind(scroll, 'scroll'), 20) : (this.direction === 'top' && this.hideBtn());
},
control : function(e) {
var t = e.target, name = t.getAttribute('name');
switch(name) {
case '__bottom':
this.scrollToBottom();
break;
case '__hide' :
this.closeBtn(e);
break;
default :
this.scrollToTop();
break;
}
},
scrollToTop : function() {
this.direction = 'top';
this.scroll();
},
scrollToBottom : function() {
this.direction = 'bottom';
var bodyHeight = global.document.body.scrollHeight,
documentElementHeight = global.document.documentElement.scrollHeight;
this.pageHeight = Math.max(bodyHeight, documentElementHeight);
this.scroll();
}
};

//Autoscroll
(function() {
var isAutoScroll = false;

var autoScroll = {
__autoScrollID : 0,

isAutoScroll : false,

defaultSpeed : 1,

currentSpeed : 1,

intervalTime : 100,

reset : function() {
this.isAutoScroll && (this.currentSpeed = this.defaultSpeed);
},

startOrStop : function() {
var that = this;
if(that.isAutoScroll) {
that.isAutoScroll = false;
clearInterval(that.__autoScrollID);
} else {
that.isAutoScroll = true;
that.__autoScrollID = setInterval(function() {
global.scrollBy(0, that.currentSpeed);
}, that.intervalTime);
}
},

fast : function() {
this.isAutoScroll && this.currentSpeed <= 10 && this.currentSpeed++;
},

slow : function() {
this.isAutoScroll && this.currentSpeed > 1 && this.currentSpeed--;
},

keyControl : function(e) {
if(e.target != global.document.body && e.target != global.document.documentElement) return false; // only when the cursor focus on the page rather than the input area can trigger this event.
var charCode = e.charCode,
key = this.keyMap[charCode];
key && this[key]();
},

keyMap : {
'100' : 'slow', // press 'd', slow the speed of the scroll
'102' : 'fast', // press 'f', speed scroll
'114' : 'reset', // press 'r', reset the autoscroll's speed
'115' : 'startOrStop' //when you click 's' at the first time, the autoscroll is begin, and then you click again, it will stop.
}
};
global.addEventListener('keypress', bind(autoScroll, 'keyControl'), false);
}())
}(window.top))

最佳答案

在新行的 //==/UserScript== 之前添加:

// @grant          GM_addStyle

事实上,我很惊讶它到现在为止仍然有效,因为 Greasemonkey 需要 @grant 一年多了。

关于javascript - 用户脚本在 Chrome 上的 Tampermonkey 中有效,但在 Firefox 上的 Greasemonkey 中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32957523/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com