【发布时间】:2012-09-10 15:39:10
【问题描述】:
我正在为Unicreatures 编写用户脚本,用于跟踪探索期间的事件。它正在工作(嗯,它可以工作,但仍需要一些工作,哈哈)但我需要一种方法来显示我正在收集的信息,而不涉及每个步骤的弹出警报。
如何在页面上创建一个框并在其中显示内容?
我希望在此页面的菜单左侧创建一个框架、窗口等任何内容,并在我的脚本运行时将各种变量的值写入其中。
我在 localStorage 中收集这些数据,所以我的脚本将首先更新各种 localStorage 属性,然后以某种方式在此框中显示结果:
localStorage.steps = Number(localStorage.steps) + 1;
displayValueInFloatingBox(localStorage.steps + ' in Sargasso' );
我还想在此框中添加一个按钮来重置这些属性的值,这样我就可以选择永久跟踪还是只跟踪一两个会话,而不必每次都编辑脚本(尤其是如果我决定分享脚本)。我假设这只会将变量设置为零,所以我只需要知道如何创建按钮并让它做某事......这可能会以某种方式使用 eventListener。
请坚持使用纯 JavaScript,不要使用 jQuery……我现在还几乎没有接触到 JavaScript。并且请解释答案,以便我了解某些东西是如何工作的 - 我不只是想要让我回到类似问题的代码 sn-ps,因为我不明白为什么要使用一些代码。
附录 A:我当前的脚本
// ==UserScript==
// @name Unicreatures Egg pop-up
// @namespace Unicreatures Egg pop-up
// @description Unicreatures Egg pop-up
// @include http://unicreatures.com/explore.php*
// @include http://www.unicreatures.com/explore.php*
// ==/UserScript==
var regexp = /You find an? (Exalted )?(.*?) egg nearby/;
var match = regexp.exec( document.body.innerHTML );
if ( match ) {
if ( match[1] ) {
alert( "Exalted egg found: " + match[2] );
} else {
alert( "Normal egg found: " + match[2] );
}
}
var y = document.body.innerHTML;
var links = document.getElementsByTagName( 'a' );
for ( var i = 0; i < links.length; i++ ) {
var link = links[i];
if ( /area=sea(?!\&gather)/.test( link.href )) {
link.addEventListener( 'click', function () {
localStorage.steps=Number(localStorage.steps)+1
// alert(localStorage.steps + ' in Sargasso' );
}, true );
}
}
//document.addEventListener('click', function(){alert('page clicked')}, true);
if(y.indexOf("You find a Noble")> 0)
{
alert('Noble Egg Alert');
}
if(y.indexOf("You find an Exalted")> 0)
{
localStorage.exaltedEggCount=Number(localStorage.exaltedEggCount)+1;
alert('Exalted Egg Alert '+localStorage.exaltedEggCount);
}
if(y.indexOf("egg nearby!")> 0)
{
localStorage.eggCount=Number(localStorage.eggCount)+1;
alert('Egg Alert '+localStorage.eggCount);
}
【问题讨论】:
-
您要求通过 GreaseMonkey(或 UserScript)做的事情中有 90% 与制作在页面上运行的普通 Javascript 程序所做的事情完全相同。我们在 StackOverflow 的大多数人不介意帮助已经做出努力的人,但我们通常不愿意只交出代码块。回来看看你尝试过的具体例子。我会 start 在普通页面上只使用常规 javascript。更容易测试。 通常之后将其转换为 UserScript 相当容易。
-
如果您更好地阅读我的问题,您会发现我不只是想要一段代码。我正在寻求帮助以找到答案,或者如果给出了代码,我想知道是什么让它工作的,以便我知道如何在其他地方做它......而且真的有那么大的代码块只是为了放页面上的小侧边栏?考虑到我需要的所有按钮的代码是知道如何将按钮放在那里,以及在该代码中的哪里放置我的指令?我没有意识到要制作一个带有 1 个按钮和 1 个复选框的空侧边栏需要这么多代码,所以我可以看到它是如何完成的
-
实际上根本不需要那么多代码——但是稍加研究就会发现很多关于如何操作 DOM、添加
div元素并添加或添加checkbox。这个问题表明没有尝试基础研究。 -
@KatCox 在页面左侧添加一个元素比在页面中添加一个“标题栏”需要更多的工作。我建议你先试试。我只是将一个新的 div 附加到正文 - 确保它是页面上的第一个元素。您可以使用 document.insertBefore(newElement, document.childNodes[0]);,其中 newElement 是这样创建的 document.createElement('div') document.childNodes[0] 只返回文档对象的第一个子对象。因此,如果您在第一个退出元素之前插入一个新元素,您将把您的元素添加到页面的最顶部。
-
@enhzflep 谢谢,现在我知道要查找什么了!我真的很感谢伸出援助之手......我真的不知道我应该看 div,并且由于某种原因我没有想到在我的任何搜索中使用插入(或者我的问题的标题可能会更清楚。现在,也许我的多动症会让我忘记这个足够长的时间去睡觉哈哈!谢谢!如果你添加你的评论作为答案,我可能会接受它。
标签: javascript button greasemonkey webpage