将命令从Javascript转换为Greasmonkey
我试图在一个页面上添加一个字符计数器,在这个页面上我输入了三个值,它在div的innerHTML中返回一个大字符串,ID为'AnswerBoxID',现在我想让我的脚本明显地计算我写的代码中的字符数将命令从Javascript转换为Greasmonkey,javascript,greasemonkey,Javascript,Greasemonkey,我试图在一个页面上添加一个字符计数器,在这个页面上我输入了三个值,它在div的innerHTML中返回一个大字符串,ID为'AnswerBoxID',现在我想让我的脚本明显地计算我写的代码中的字符数 var submit=document.getElementsByClassName('Row3'); function countChars(){ count = document.getElementById('AnswerBoxID').innerHTML.length; do
var submit=document.getElementsByClassName('Row3');
function countChars(){
count = document.getElementById('AnswerBoxID').innerHTML.length;
document.title ="Chars "+count+"/160";
}
它返回字符的大致近似值,当我将其粘贴到编辑器或其他计算字符的工具中时,我再次得到一个不同的结果,使用此方法计算的字符数与其他报告的字符数相差不超过5个字符(特别是记事本+)
但我最大的问题是我无法更新countChars()
当document.getElementById('AnswerBoxID').innerHTML的值更新时,在javascript中,我使用以下代码克服了这一问题
var submit=document.getElementsByClassName('Row3');
for (i=0; i<submit.length; i++){
submit[i].firstChild.setAttribute('onclick','countChars()');
}
var submit=document.getElementsByClassName('Row3');
对于GreaseMonkey中的(i=0;i),您应该能够使用:
var count = document.getElementById('AnswerBoxID').textContent.length;
在GreaseMonkey中,您应该能够使用:
var count = document.getElementById('AnswerBoxID').textContent.length;
Greasemonkey脚本运行沙盒。这意味着,脚本在页面的onload
事件中运行,然后被删除。提交表单时调用Greasemonkey脚本的countChars()
函数将返回未定义的错误,因为DOM中不再存在函数对象
下面是我的简化contentEval
函数(基于GM wiki的函数):
您还可以设置text
属性,而不是textContent
,以与旧版IE兼容,谢谢RogG
将该函数放入GM脚本中,它将用于将以后需要使用的任何函数附加到DOM头部
将countChars
函数作为参数传递给contentEval
函数:
function contentEval(source) {
var script = document.createElement('script');
script.setAttribute("type", "text/javascript");
script.textContent = source;
document.head.appendChild(script);
}
contentEval(function countChars() {
var count = document.getElementById('AnswerBoxID').textContent.length;
document.title ='Chars '+count+'/160';
});
这样,您的countChars
函数将被放置在附加到文档头的脚本
元素中,在GM脚本的执行时间结束后可以访问该元素
如果要检查上述代码的演示,请在中使用DOM检查器。它将创建一个新的脚本元素,该元素将附加到(在JSFIDLE的情况下是iframe
)文档的头,这意味着无论何时需要都可以访问它
您也可以简单地将函数附加到,但除非严格必要,否则应避免使用unsafeWindow
,并注意Google Chrome不支持unsafeWindow
请使用本页作为参考:
还可以使用该方法获取RobG指出的元素(及其子体)的文本内容。Greasemonkey脚本运行沙盒。这意味着,该脚本在页面的onload
事件中运行,然后被删除。调用Greasemonkey脚本的countChars()
提交表单时,函数将返回一个未定义的
错误,因为您的函数对象不再存在于DOM中
下面是我的简化contentEval
函数(基于GM wiki的函数):
您还可以设置text
属性,而不是textContent
,以与旧版IE兼容,谢谢RogG
将该函数放入GM脚本中,它将用于将以后需要使用的任何函数附加到DOM头部
将countChars
函数作为参数传递给contentEval
函数:
function contentEval(source) {
var script = document.createElement('script');
script.setAttribute("type", "text/javascript");
script.textContent = source;
document.head.appendChild(script);
}
contentEval(function countChars() {
var count = document.getElementById('AnswerBoxID').textContent.length;
document.title ='Chars '+count+'/160';
});
这样,您的countChars
函数将被放置在附加到文档头的脚本
元素中,在GM脚本的执行时间结束后可以访问该元素
如果要检查上述代码的演示,请在中使用DOM检查器。它将创建一个新的脚本元素,该元素将附加到(在JSFIDLE的情况下是iframe
)文档的头,这意味着无论何时需要都可以访问它
您也可以简单地将函数附加到,但除非严格必要,否则应避免使用unsafeWindow
,并注意Google Chrome不支持unsafeWindow
请使用本页作为参考:
还可以使用该方法获取RobG指出的元素(及其子元素)的文本内容。您似乎添加了错误的事件处理程序
elm.setAttribute('onclick','countChars()');
将设置一个属性,并在单击元素时在全局范围内eval“countChars()”
。但是,Greasemonkey脚本会运行,并且您声明的函数“countChars”对eval不可用
elm.addEventListener('click',countChars(),true);
立即执行函数并将返回值作为处理程序添加。要使其正常工作,只需删除括号并传递函数本身。另请参见添加事件处理程序时出现的错误
elm.setAttribute('onclick','countChars()');
将设置一个属性,并在单击元素时在全局范围内eval“countChars()”
。但是,Greasemonkey脚本会运行,并且您声明的函数“countChars”对eval不可用
elm.addEventListener('click',countChars(),true);
立即执行函数并将返回值作为处理程序添加。要使其正常工作,只需删除括号并传递函数本身。另请参见Greasemonkey脚本运行沙盒。您不能调用countChars()
从您使用DOM的脚本开始!您应该试试DOM脚本注入黑客。谢谢,伙计,我会读一读这篇文章。这是一个好的开始:我有两个工作脚本,如果您在此之前没有得到工作答案,我会先测试它们,然后再作为答案发布P@Fabr里奇奥·马特:哈,那是什么?就用吧。@hamsolo474:你真的应该告诉你s脚本运行的页面。Greasemonkey脚本运行沙盒。您不能调用countChars()
从您使用DOM的脚本开始!您应该试试DOM脚本注入黑客。谢谢,伙计,我会读一读这篇文章。这是一个好的开始:我有两个工作脚本,如果您在此之前没有得到工作答案,我会先测试它们,然后再作为答案发布P@Fabr里奇奥·马特:哈,那是什么?就用它。@hamso