Facebookを1日1時間しかみれないようにしてみた
年明けのリハビリにChromeのExtension書いてみた。
内容は、タイトルの通り「Facebookを1日1時間以上見れないようにする」もの。
①ExtensionをDLする
ここにあります → http://sorauta.net/files/fbFilter.crx
②おもむろにGoogle Chromeをひらき、アドレスバーに「chrome://extensions」とうちこむ。
こんなページが出てくるはず
③DLしたExtensionをDrag & Dropする
ファイル名は「fbFilter.crx」です。
Dropすると、上記のようなアラートがでるので、Add Extensionをおす
④インストールされたか確認するために、おもむろにfacebookをひらいてみる
SSのとおり、残り時間が表示されていればインストール完了です!
おめでとうございます。
経過秒数後どうなるかって?
それは、やってみてのおたのしみということで(特にそんな大したことしてない)。
ソースは下記。
manifest.json
{ "name": "Internet filter", "version": "0.1", "manifest_version": 2, "description": "This Extension is intended to limit the viewing time of Facebook.", "icons": { "48": "icon128.jpg", "128": "icon128.jpg" }, "content_scripts": [{ "matches": ["https://www.facebook.com/*"], "js": ["script.js"] }] }
script.js
var STOP_THRESHOLD = 3600; // 1日あたり、この秒数以上Facebookをみていたら閲覧制限がかかる var TIMER_INTERVAL = 1000; // loop関数を実行する周期、ミリ秒で表記 var watchTimer; var fbClosed = false; var isViewer = false; /** * 初期処理を行う関数 * ページをひらくとまずこの関数が実行されます */ var setup = function() { console.log('setup fbTiler'); // ブラウザ上に保存されていたデータを読みだす var storedTimestamp = Number(localStorage.getItem("storedTimestamp")); // もしブラウザ上にデータが保存されていなかった場合、初期化する if (storedTimestamp == null) { console.log("initialize local storage"); var cDate = new Date(); storedTimestamp = Math.floor(cDate.getTime() / 1000); saveToStorage(storedTimestamp, 0); } // loop関数を定期的に実行するようにセット watchTimer = setInterval(loop, TIMER_INTERVAL); // 残り時間をFacebook上に表示するようにする var mPattern = location.href.match("/messages/([0-9a-z\.\_\-]+)"); if ((location.pathname == "/" || (mPattern.length > 0 && mPattern[1].length > 0)) && document.title && document.title.length > 0) { var element = document.createElement('div'); element.id = "timeLimitView"; element.innerHTML = " "; element.style.position = 'fixed'; element.style.bottom = '5px'; element.style.left = '5px'; document.body.appendChild(element); isViewer = true; } } /** * 定期的に実行される関数 * 閲覧時間の確認、表示制限の処理などを行う */ var loop = function() { // タイムスタンプ(long型)を、処理しやすいように連想配列に整形する var cDate = new Date(); var cHash = getDateHash(Math.floor(cDate.getTime() / 1000)); var storedTimestamp = Number(localStorage.getItem("storedTimestamp")); var sHash = getDateHash(storedTimestamp); // 日付が更新されたか確認 var keys = ['Y', 'M', 'D']; var isDifferentDate = false; for (var i in keys) { if (cHash[keys[i]] != sHash[keys[i]]) { isDifferentDate = true; break; } } // 日付が更新されていた場合、閲覧秒数のカウントをリセット if (isDifferentDate == true) { cTimestamp = Math.floor(cDate.getTime() / 1000); console.log("update stored data", cTimestamp); saveToStorage(cTimestamp, 0); } // 経過時間をチェックする else { var storedViewSec = Number(localStorage.getItem("storedViewSec")); // 閲覧時間が、本日の制限時間を超えていた場合、表示をブロック if (storedViewSec > STOP_THRESHOLD) { //console.log("shut down facebook"); document.body.innerHTML = '<center><img src="http://serif.hatelabo.jp/images/cache/2b0a04a1636b501e0ad202e672039491b05690d9/f9d7755e1c8f7abead4c76b1a4c5e2225aba1080.gif" style="margin:10px auto;text-align:center;" /></center>'; fbClosed = true; } // 残り時間を更新 else { if (isViewer == true) { document.getElementById('timeLimitView').innerHTML = (STOP_THRESHOLD - storedViewSec) + " sec"; } //console.log("only " + (STOP_THRESHOLD - storedViewSec) + " second, you can enjoy facebook"); saveToStorage(storedTimestamp, storedViewSec + (TIMER_INTERVAL / 1000)); // TODO: test here //if (fbClosed == true) { // location.reload(); //} } } } /** * タイムスタンプを処理しやすいように連想配列に変換する */ var getDateHash = function(timestamp) { var d = new Date(timestamp * 1000); var hash = { Y : d.getFullYear(), // year M : d.getMonth() + 1, // month D : d.getDate(), // date h : d.getHours(), // hour m : d.getMinutes(), // min s : d.getSeconds(), // sec t : Math.floor( d.getTime() / 1000 ), // unix time }; for (var k in hash) { if (k != 'Y' && k != 't') { hash[k] = ('0' + hash[k]).slice(-2); } } return hash; } /** * ブラウザ上に現在の閲覧時間などを保存する */ var saveToStorage = function(st, sv) { localStorage.setItem("storedTimestamp", st); // unix time localStorage.setItem("storedViewSec", sv); // sec } /////////////////////////////////// // 初期化する関数を実行 setup();
gitにもあげたので、なにか更新があればこちらのリポジトリでやってきます
https://github.com/rin1024/Internet-filter-on-Chrome