// ==UserScript== // @name ldr hatebu comments viewer // @namespace http://efcl.info/ // @description LDR上ではてなブックマークコメントビューアーを使ってはてブコメントを見る // @include main // ==/UserScript== var regex = /^http:\/\/reader\.livedoor\.com\/reader\//i; var startDomContentLoaded = function(event) { var doc = event.target; // chromeのdocument var safeWindow = doc.defaultView; //contentのwindow if (regex.test(safeWindow.location.href)) { // Chrome側 - 受信 doc.addEventListener("hatenaPingMessage", function (request) { var res = request.data; if (res === "hide") { hBookmark.CommentViewer.hide(); } else { hBookmark.CommentViewer.toggle(res); } }, false); // Content側 - 送信 evalInPage(function() { window.addEventListener("load", function() { window.Keybind.add('m', function(evt) { var item = window.get_active_item(true); var permalink = item.link.replace(/#/, '%23'); pingToChrome(permalink); }); var _j = window.Keybind._keyfunc.j;// jを保存してから書き換える window.Keybind.add('j', function(evt) { _j(); pingToChrome("hide"); }); }, false); // Chrome領域へ通知 function pingToChrome(message) { var request = document.createEvent("MessageEvent"); request.initMessageEvent("hatenaPingMessage", true, false, message, location.protocol + "//" + location.host, "", window); document.dispatchEvent(request);// =>hatenaPingMessage } }, []); } function evalInPage(func, args) { var argStr = JSON.stringify(args || []); safeWindow.location.href = "javascript:void " + func + ".apply(null," + argStr + ")"; } } gBrowser.addEventListener('DOMContentLoaded', startDomContentLoaded, false); // firebugのコンソールに出力 function fbug(x) { var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator); var Firebug = windowManager.getMostRecentWindow("navigator:browser").Firebug; if (Firebug.Console.isEnabled() && Firebug.toggleBar(true, 'console')) { Firebug.Console.logFormatted(Array.slice(arguments)); } return x; }