V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yuann72
V2EX  ›  问与答

这是 tampermonkey 的 bug 吗?

  •  
  •   yuann72 · 2016-02-13 11:51:40 +08:00 · 2694 次点击
    这是一个创建于 3001 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这是脚本的代码
    // ==UserScript==
    // @name New Userscript
    // @namespace http://tampermonkey.net/
    // @version 0.1
    // @description try to take over the world!
    // @author You
    // @match www.baidu.com
    // @grant none
    // ==/UserScript==
    function ABC(){
    alert("");
    }

    setInterval("ABC()",3000)

    运行后控制台里出错误
    Uncaught ReferenceError: ABC is not defined

    5 条回复    2017-11-28 11:05:58 +08:00
    yuann72
        1
    yuann72  
    OP
       2016-02-13 11:52:17 +08:00
    如果我单独把
    function ABC(){
    alert("");
    }

    setInterval("ABC()",3000)
    几行代码放控制台里运行就一切正常
    pentium100
        2
    pentium100  
       2016-02-13 12:24:39 +08:00 via Android
    试下:
    setInterval(ABC,3000)
    yuann72
        3
    yuann72  
    OP
       2016-02-13 13:13:14 +08:00
    @pentium100 我在其他脚本里运行同样情况,相关代码正常运行,但控制台里依旧有 Uncaught ReferenceError: ABC is not defined.....算了不管了
    现在问下 setInterval 的正确写法是
    setInterval(ABC,3000)
    那 setTimeout 的正确写法是
    setTimeout(ABC,3000)
    还是
    setTimeout("ABC()",3000);
    ceoimon
        4
    ceoimon  
       2016-02-13 15:45:08 +08:00
    @yuann72 setInterval 和 setTimeout 接受的第一个参数可以有三种形式,第一种为函数名,第二种为匿名函数,第三种也是用得最少的一种是直接用语句(双引号包裹,可多条)。

    至于 not defined 的问题我猜测是 tampermonkey 会建立自己的命名空间再注册函数以防污染全局变量,所以你无法调用 ABC 函数。
    niceb
        5
    niceb  
       2017-11-28 11:05:58 +08:00
    请问楼主解决了吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2121 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:58 · PVG 23:58 · LAX 08:58 · JFK 11:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.