1

特定のテキストのリンクを開くブックマークレットを作成しようとしていますが、そのsetTimeout部分で問題が発生しています...

javascript:(function(){
    function clickLink(link) {
        if (document.createEvent) {
            var event=document.createEvent("MouseEvents"); 
            event.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
            link.dispatchEvent(event);
        } else if (link.fireEvent) {
            link.fireEvent("onclick");
        }
    } 

    l=document.links;
    for(var i=0;i<l.length;++i) {
        var lL=l[i].innerHTML.toLowerCase(); 
        if(lL.indexOf("click here")!=-1 || lL.indexOf("how")!=-1) 
             setTimeout(function() {clickLink(l[i]) }, 1000);
        }
    }; 
})();

試してみるとsetTimeout(clickLink(l[i]), 1000);、動作しますが、タイムアウトを待つのではなく、すぐに実行されます!

また、この方法でリンクをクリックすると mousedown/mouseup イベントが発生することをもう 1 つ知りたいですか? そうでない場合、マウスダウン/マウスアップイベントも発生させるリンクをプログラムでクリックするにはどうすればよいですか?

4

1 に答える 1

1

通常の「ラムダ内のループ変数」の問題に遭遇しています。タイムアウトが完了iするまでに、 は の終わりを過ぎて にdocument.linksなりl[i]ますundefined。その部分を(別の)関数でラップするだけです:

(function(item) {
    setTimeout(function() { clickLink(item); }, 1000);
})(l[i]);
于 2012-09-17T14:27:00.730 に答える