ページの最後でスクロールしようとしたら自動で閉じる
これで、
- Google Readerからvキーで元ページを表示
- スペースキーで読み進む
- ページの最後まで表示したら閉じる
という一連の操作がスムーズにできる。
(2006.10.14 Altキーのチェックを追加)
// ==UserScript== // @name CloseAtPageEnd // @namespace http://d.hatena.ne.jp/nozom/ // @include * // @description Add autoclosing at the end of page // ==/UserScript== // Released under the GPL license // http://www.gnu.org/copyleft/gpl.html (function() { function get_remain() { var canvas = document[ document.compatMode == 'CSS1Compat' ? 'documentElement' : 'body']; // GM_log('scrollHeight = ' + canvas.scrollHeight); // GM_log('clientHeight = ' + canvas.clientHeight); // GM_log('scrollTop = ' + canvas.scrollTop); // GM_log('pageYOffset = ' + window.pageYOffset); var total = canvas.scrollHeight - canvas.clientHeight; return total - window.pageYOffset; } function close_window() { window.opener = window; var win = window.open(location.href, "_self"); win.close(); } function forward_page() { var remain = get_remain(); // GM_log('remain = ' + remain); if (remain == 0) { if (confirm('Close?')) { close_window(); } } } function GRT_key(event) { var element = event.target; var elementName = element.nodeName.toLowerCase(); if ((elementName == "input") || (elementName == "textarea")) { return true; } if (String.fromCharCode(event.which) == " " && !event.ctrlKey && !event.altKey) { forward_page(); return false; } return true; } function GRT_wheel(event) { var delta = event.detail; if (delta > 0) { forward_page(); } } if (window.parent == window.self) { document.addEventListener("keypress", GRT_key, false); // document.addEventListener("DOMMouseScroll", GRT_wheel, false); } })();
参考サイト
- 大本にしたスクリプト(ほとんど原形を留めてないけど)
- マウスホイールイベントを扱う方法
- スクロール量を取得する方法
- Javascriptから任意のウィンドウを閉じる方法