未捕获的ReferenceError:<my userscript-defined =“”function =“”>未定义</my>

时间:2014-09-04 14:01:00

标签: javascript userscripts

我正在编写一个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);

1 个答案:

答案 0 :(得分:1)

两个问题:

  1. 函数SB_Change在load-function范围内定义。当您点击链接时,此范围不再存在 将定义移动到加载处理程序之外,如下所示:

    window.addEventListener ('load', function () {
        ... ...
    }, false);
    
    function SB_Change (type){
        ... ...
    }
    
  2. 否则,此问题与Uncaught ReferenceError: function is not defined with onclick重复 除非(a)您故意注入代码或(b)在支持它的引擎上使用@grant none模式,否则用户脚本将被沙箱化。 (除非绝对必要,否则不建议使用这些模式。)

    不要使用onclick(¡!)!请参阅重复的问题。