greasemonkey
Up one level2007/10/31
LDRize + iframe
LDRizeを自分用にカスタマイズしたものが意外と評判よかったので公開します。
- 11562.user.js用のパッチ
- パッチ適用済みLDRize.user.js
主な特徴
『i』キーを押すと、iframeでその場にページを開きます
- iframe内のページはSpace, Shift-Spaceキーでスクロールできます
- 1番目の項目は自動で開いてFeeling Lucky♪ (Googleのみ有効)
[ScreenShot]
メモ書き
- iframe内に開いた異なるドメインのサイトは、セキュリティ上JavaScriptによる操作はできない
- 今回はスクロールしたいだけだったので、以下のような感じでおk
addEventListener(document, 'keydown', function(e){
if(e.keyCode == 32){
$('_iframe').contentWindow.focus();
setTimeout(function(){ window.focus() }, 0);
}
}, false);
- ただし上のはカレント項目がiframeで開かれているときのみ発動させる
- I'm Feeling Luckyがウザい人はLDRize.initの最後の一行を削除でおk
- 以下のパッチを各自よくみて、自己責任でお願いします
:ldrize.patch
*** 11562.user.js 2007-10-31 01:20:50.000000000 +0900
--- ldrize.user.js 2007-10-31 01:23:38.000000000 +0900
***************
*** 16,21 ****
--- 16,22 ----
'S-j' : 'NextPage',
'S-k' : 'PrevPage',
'v' : 'View',
+ 'i' : 'Iframe',
'p' : 'Pin',
'o' : 'Open',
'l' : 'List',
***************
*** 31,36 ****
--- 32,38 ----
'NextPage' : 'Scroll next page',
'PrevPage' : 'Scroll prev page',
'View' : 'Open in current tab',
+ 'Iframe' : 'Open in iframe',
'Pin' : 'Pin',
'Open' : 'Open pinned items or current item',
'List' : 'Toggle pinned items list',
***************
*** 199,204 ****
--- 201,207 ----
}
LDRize._enable = true;
+ document.addEventListener('keydown', LDRize.focusOnIframe, false);
document.addEventListener('keypress', LDRize.handleKey, false);
document.addEventListener('mousemove', function(){LDRize.invisibleRemove(LDRize.invisiblelist)}, true);
LDRize.initCommand();
***************
*** 216,221 ****
--- 219,225 ----
css += LDRize.setCSS();
css += LDRize.initSpace();
if(css != '') addStyle(css);
+ if(window.document.URL.match(/http:\/\/.*google.*\/.*/)) LDRize.viewCurrent('iframe');
}
},
initBindCommand : function(){
***************
*** 224,229 ****
--- 228,235 ----
LDRize.bindNextPage = LDRize.scrollNextPage;
LDRize.bindPrevPage = LDRize.scrollPrevPage;
LDRize.bindView = function(){LDRize.viewCurrent('here')};
+ LDRize.bindIframe = function(){LDRize.viewCurrent('iframe')};
+ LDRize.bindIframeFocus = LDRize.iframeFocus;
LDRize.bindPin = LDRize.attachPin;
LDRize.bindOpen = LDRize.openPinned;
LDRize.bindList = LDRize.togglePinList;
***************
*** 758,763 ****
--- 764,771 ----
if(LDRize.css_highlight_link) css += "\n.gm_ldrize_link {" + LDRize.css_highlight_link + "}";
if(LDRize.css_highlight_pinned) css += "\n.gm_ldrize_pinned {" + LDRize.css_highlight_pinned + "}";
css += ".gm_ldrize_invisible { visibility:hidden; }";
+ css += ".gm_ldrize_iframe { border:3px ridge #6f6 !important; }";
+ css += ".gm_ldrize_iframe iframe { width:100% !important; min-height:200px !important; border:none !important; }";
return css;
},
***************
*** 1091,1101 ****
--- 1099,1133 ----
LDRize.scrollNext();
}else if(type=='here'){
window.location.href = url;
+ }else if(type=='iframe'){
+ if(!LDRize.current_parapraph) return;
+ var node = LDRize.current_parapraph.lastChild;
+ if(!node || (node.nodeType == 1 && node.className.match(/gm_ldrize_iframe/))) return;
+ if(url.match(/.pdf$/)){ LDRize.viewCurrent('here'); return; }
+ var div = document.createElement('div');
+ div.setAttribute('class', 'gm_ldrize_iframe');
+ var iframe = document.createElement('iframe');
+ iframe.style.height = (window.innerHeight - LDRize.current_parapraph.offsetHeight - 25) + ' !important;';
+ iframe.src = url;
+ iframe.addEventListener('load', function(){ window.focus() }, false);
+ div.appendChild(iframe);
+ LDRize.current_parapraph.appendChild(div);
}else{
window.open(url);
}
},
+ // space
+ focusOnIframe : function(event) {
+ if(event.keyCode != 32) return;
+ if(/input|textarea/i.test(event.target.tagName)) return;
+ if(!LDRize.current_parapraph) return;
+ var node = LDRize.current_parapraph.lastChild;
+ if(!node || node.nodeType != 1 || !node.className.match(/gm_ldrize_iframe/)) return;
+ node.firstChild.contentWindow.focus();
+ setTimeout(function(){ window.focus() }, 0);
+ },
+
// ?
toggleHelpMessage : function(){
return (LDRize.hideHelpMessage() || LDRize.showHelpMessage());
ldrize.patch
Size 3.8 kB - File type text/x-patchldrize.user.js
Size 55.0 kB - File type application/x-javascript- Category(s)
- JavaScript
- greasemonkey
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/hamabe/ldrize-iframe/tbping
2008/02/29
GoogleReaderでスペースキーをLDR風に使うGreasemonkeyスクリプト
最近GoogleReaderを試しているのですが、
ざっと使って見たところ大きな不満点は『スペースキーのスクロールをLDR風にしたい』ってぐらいで、
後は思っていた以上に使いやすくていい感じです。
『*1, *2, *3, ...』のようなタグを作っておけばLDRのレートちっくな機能も簡単に実現できます。
ということで書いた修正スクリプトが割といい感じだったので公開しておきます。
単純にkeydownイベントを追加するだけでは他の機能とバッティングしてしまうし、
かといってイベント伝搬を止めてしまうのは問題外なので、
今回は頑張って難読化されたJavaScriptコードを追いかけて改変してみました。
Googleの難読化されたJavaScriptと戦うための戦略
# 最近上記アカウントでひっそりとブログを始めましたが、よい成果物ができたときにはありえるえりあでも公開します。
- Category(s)
- JavaScript
- greasemonkey
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/hamabe/googlereader30b930fc30b930ad30fc3092ldr98a8306b4f7f3046user.js/tbping