我正在编写一个UserScript,一切正常,直到现在,当我点击我应用onClick属性的按钮时,控制台一直告诉我Uncaught ReferenceError: SB_Change is not defined
而函数SB_Change(what)
将不会执行。
代码:
window.addEventListener('load', function() {
var but1 = document.createElement("BUTTON");
var t1=document.createTextNode(" + ");
but1.style.width = "16px";
but1.style.height = "16px";
but1.appendChild(t1);
but1.setAttribute('onclick','SB_Change("+")');
// -
var but2 = document.createElement("BUTTON");
var t2=document.createTextNode(" - ");
but2.appendChild(t2);
but2.style.width = "16px";
but2.style.height = "16px";
but2.setAttribute('onclick','SB_Change("-")');
// -
var SB_text = document.getElementById("shoutbox").getElementsByTagName("h3")[0];
SB_text.innerHTML = "Shoutbox ";
SB_text.appendChild(but1);
SB_text.appendChild(but2);
function SB_Change(type){
var H = document.getElementById("sbPosts").maxHeight;
switch(type){
case "+":
H = "800px";
break;
case "-":
H = "400px";
break;
}
}
}, false);
答案 0 :(得分:1)
两个问题:
函数SB_Change
在load-function范围内定义。当您点击链接时,此范围不再存在
将定义移动到加载处理程序之外,如下所示:
window.addEventListener ('load', function () {
... ...
}, false);
function SB_Change (type){
... ...
}
否则,此问题与Uncaught ReferenceError: function is not defined with onclick重复
除非(a)您故意注入代码或(b)在支持它的引擎上使用@grant none
模式,否则用户脚本将被沙箱化。 (除非绝对必要,否则不建议使用这些模式。)
不要使用onclick
(¡!)!请参阅重复的问题。