Greasemonkey脚本隐藏stackoverflow帖子
Greasemonkey script to hide stackoverflow posts?
我发现自己一遍又一遍地读同样的问题,所以我想要一种隐藏问题的方法。
我有一个脚本做什么是应该做的,但它削弱了现有的javascript,如upvote按钮和添加标签时提出的问题。有人知道为什么会发生这种情况,或者如何解决它吗?
编辑:哦,在错误控制台中我得到:
Error: $ is not a function
Source File: http://cdn.sstatic.net/js/stub.js?v=b7084478a9a4
Line: 1
Edit2:
<标题> 的解决方案(固定@17/06/2014)
// ==UserScript==
// @name StackOverflowHidePosts
// @namespace StackOverflowHidePosts
// @description Allows you to hide questions on Stack Overflow.
// @include http://stackoverflow.com/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js
// ==/UserScript==
var idListString = GM_getValue('idList', '');
var idList = idListString.split(',');
GM_setValue('idList', idList.join(','));
function getId (idString)
{
return idString.split('-')[2];
}
function removeQuestion (e)
{
var id = getId(e.data.questionSummaryDiv.id);
$(e.data.questionSummaryDiv).hide(250);
idList.push(id);
setTimeout(function() {
GM_setValue('idList', idList.join(','));
}, 0);
return false;
}
$('div.question-summary').each(function (index, questionSummaryDiv)
{
var id = getId(questionSummaryDiv.id);
if (idList.indexOf(id) != -1)
{
$(questionSummaryDiv).hide();
return;
}
var link = $('<a><em>(Hide Post)</em></a>');
link.attr('href', '#' + questionSummaryDiv.id);
link.click({questionSummaryDiv: questionSummaryDiv}, removeQuestion);
$('div.started', questionSummaryDiv).append(link);
});
标题>如果没有必要,永远不要注入JS,并且永远不要在FF GM中使用页面的jQuery——这是这种情况下错误的主要来源。
整个脚本应该是:
// ==UserScript==
// @name StackOverflowImTooStupidMarker
// @namespace StackOverflowImTooStupidMarker
// @description Allows you to hide questions on Stack Overflow when you can't answer them.
// @include http://stackoverflow.com/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js
// ==/UserScript==
var idListString = GM_getValue('idList', '');
var idList = idListString.split(',');
GM_setValue('idList', idList.join(','));
function getId (idString)
{
return idString.split('-')[2];
}
function removeQuestion (e)
{
var id = getId(e.data.questionSummaryDiv.id);
$(e.data.questionSummaryDiv).hide(250);
idList.push(id);
setTimeout(function() {
GM_setValue('idList', idList.join(','));
}, 0);
return false;
}
$('div.question-summary').each(function (index, questionSummaryDiv)
{
var id = getId(questionSummaryDiv.id);
if (idList.indexOf(id) != -1)
{
$(questionSummaryDiv).hide();
return;
}
var link = $('<a><em>(Too Stupid)</em></a>');
link.attr('href', '#' + questionSummaryDiv.id);
link.click({questionSummaryDiv: questionSummaryDiv}, removeQuestion);
$('div.started', questionSummaryDiv).append(link);
});
该脚本试图首先包含jQuery:
(function()
{
if (typeof unsafeWindow.jQuery == 'undefined')
{
var GM_Head = document.getElementsByTagName('head')[0] || document.documentElement, GM_JQ = document.createElement('script');
GM_JQ.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
GM_JQ.type = 'text/javascript';
GM_JQ.async = true;
GM_Head.insertBefore(GM_JQ, GM_Head.firstChild);
}
GM_wait();
})();
这个问题是,jQuery是保证加载堆栈溢出开始…如果它不存在,你就有更大的问题了。整个jQuery替换不应该发生,因为它既影响了已经注册的插件(然后是nuking),也使用了Stack Exchange目前使用的新版本的jQuery,这意味着其他潜在的破坏性变化。
由于脚本不需要任何最新的功能,所以上面的整个块应该是:
GM_wait();
对于其他问题,有更多的$
冲突…但是你仍然需要保证加载顺序的安全。这里有一个更便宜,更安全的版本…嗯,工作原理:
var idListString = GM_getValue('idList', '');
var idList = idListString.split(',');
GM_setValue('idList', idList.join(','));
GM_wait();
function GM_wait() {
if (typeof unsafeWindow.jQuery == 'undefined') {
window.setTimeout(GM_wait, 100);
return;
}
unsafeWindow.jQuery(function($) {
var link = $('<a href="#"><em>(Too Stupid)</em></a>').click(removeQuestion);
$('div.question-summary').each(function (index, questionSummaryDiv) {
var id = getId(questionSummaryDiv.id);
if (idList.indexOf(id) != -1) {
$(questionSummaryDiv).hide();
} else {
$('div.started', questionSummaryDiv).append(link.clone(true));
}
});
});
}
function getId (idString) {
return idString.split('-')[2];
}
function removeQuestion () {
var q = unsafeWindow.jQuery(this).closest("div.question-summary").hide(250);
idList.push(getId(q.attr("id")));
setTimeout(function() {
GM_setValue('idList', idList.join(','));
}, 0);
return false;
}
相关文章:
- 刷新导致我的帖子“;张贴“;再一次
- 正在加载下一个帖子
- 在Angular应用程序中每个帖子投票一次
- Javascript/jQuery压缩一个图像正确的评论帖子,并使用Ajax Laravel 5.2保存到控制器中
- 使用jQuery for RSS看不到多个帖子
- 如何在category.php中执行jquery,这应该适用于类别wordpress中的每个帖子
- json字符串的Javascript帖子:没有任何东西传入或返回
- 正在加载+10个帖子
- KeystoneJS可以't更新帖子
- 如何使用URL筛选wordpress自定义帖子类型
- 删除集合中旧邮件/帖子的最佳方式
- 从谷歌自定义搜索返回随机帖子
- 从C#应用程序向Angular页面发送帖子请求
- ajax帖子返回html
- 我创建了一个Javascript待办事项列表,但想知道如何在浏览器刷新后保留这些帖子
- 有没有一个插件可以从特定的页面/帖子中排除一些JavaScripts
- 提交评论不适用于新添加的帖子
- 连接流星中的两个收藏(帖子评论)
- 已将POST更改为GET.现在Ajax正在返回多个帖子
- Greasemonkey脚本隐藏stackoverflow帖子