Minibufferで複数のPinを開くとブロックされる件の対応
id:seltsam より、setTimeoutでずらして回避というアイディアを頂きました。Thx!
そういえば、LDRもそれでポップアップブロックを回避してました。
というわけで、以前書いたeachLater関数を使ってみました。
window.Minibuffer.addCommand({ name: 'open', command: function(stdin){ var target = this.args.shift(); if(target == 'top' || target == 'blank') target = '_' + target; eachLater(stdin,100,function(url){ if(target){ window.open(url, target); }else{ GM_openInTab(url); } }); return stdin; } });
ここはforEach関数をeachLater関数に置き換えただけ。
function eachLater(arr,ms,call,callback,ob) { var self = arr; var obj = ob || typeof(callback) != 'function' ? callback : null; var res = { complete: false, cancel: function(){ clearInterval(PID); }, notify: function(){ clearInterval(PID); if (callback && typeof(callback) == 'function') callback.call(obj,self); } }; var len = self.length; var i = 0; var PID = setInterval(function(){ try{ call.call(obj,self[i],i); } catch (e) { } finally { i++; if (i >= len) { clearInterval(PID); res.complete = true; if(callback && typeof(callback) == 'function') callback.call(obj,self); } } },ms); return res; }