Javascript Bookmarklet可根据单击的时间运行不同的功能

Javascript Bookmarklet可根据单击的时间运行不同的功能,javascript,asynchronous,delay,bookmarklet,Javascript,Asynchronous,Delay,Bookmarklet,是否可以设计一个bookmarklet,根据单击的次数运行不同的场景 我试图通过单击addEventListener和setTimeout(main,5000)来实现这一点,然后在main()最终运行时计算EventListener的触发次数。它以某种方式工作,但这种方法存在两个问题: 如果bookmarklet作为网页上的链接调用,则会捕获并计算单击次数,但如果单击书签栏,则不会。我相信这是无法解决的;当最后一个主功能以某种方式运行时,必须计算单击次数 比如说,我点击了书签3次;main()

是否可以设计一个bookmarklet,根据单击的次数运行不同的场景

我试图通过单击addEventListener和setTimeout(main,5000)来实现这一点,然后在main()最终运行时计算EventListener的触发次数。它以某种方式工作,但这种方法存在两个问题:

  • 如果bookmarklet作为网页上的链接调用,则会捕获并计算单击次数,但如果单击书签栏,则不会。我相信这是无法解决的;当最后一个主功能以某种方式运行时,必须计算单击次数

  • 比如说,我点击了书签3次;main()运行3次,间隔5000ms。如何使它只运行一次?只有最后一个,解决#1中的问题?我做这件事的方式是如此的笨重以至于几乎毫无用处,而且很容易赛车


  • 但主要的问题是,我觉得我的方法,即使可行,也太笨拙了。我知道我可以使用,比如说,prompt(),让用户输入场景的编号,或者呈现菜单并单击所需场景,但是有没有一种方法可以简单地根据给定时间范围内的单击次数/代码段运行次数来实现这一点?

    检查这是否是您需要的:

    javascript:(()=>{
    window.bmClicked=window.bmClicked?window.bmClicked+1:1;
    clearTimeout(window.bmTimeout);
    window.bmTimeout=setTimeout(()=>{
    log('window.bmClicked:',window.bmClicked);
    window.bmClicked==1&&functionOne();
    window.bmClicked==2&&functionTwo();
    window.bmClicked==3&&functionThree();
    window.bmClicked=null;
    }, 500);
    函数functionOne(){
    console.log('functionOne');
    }
    函数functionTwo(){
    log('functionTwo');
    }
    函数三(){
    log('functionThree');
    }
    })();
    
    请将书签的代码添加到问题中,否则很难找出问题所在。我想我从中学到了比一周的实验更多的东西。非常感谢,非常好。