2010/06/27
NoScript Modoki for storage
はてなスターで Opera ネタを強要されてる気がしたのでたまには Opera ネタを書いてみる。
onload が終わるまで script 要素を無効化するだけのスクリプト
// ==UserScript== // @name NoScript Modoki for storage // @namespace http://d.hatena.ne.jp/Griever/ // @include http://* // @include https://* // @exclude http://reader.livedoor.com/reader/* // @exclude http://fastladder.com/reader/* // ==/UserScript== (function(){ if (!document.getElementsByTagName('head')[0].hasChildNodes()) return; // icon http://opera.higeorange.com/misc/skin.html var ENABLE_ICON = 'Smiley Happy'; var DISABLE_ICON = 'Smiley Cry'; var ID = 'NSModoki'; var JSEnable = localStorage[ID] == 'enable'; if (!JSEnable){ opera.addEventListener('BeforeScript', cancel, false); opera.addEventListener('BeforeExternalScript', cancel_ex, false); opera.addEventListener('AfterEvent.load', afterLoad, false); } document.addEventListener('DOMContentLoaded', function(e){ var icon = document.createElement('div'); icon.id = 'NSModoki-icon'; icon.style.cssText = [ 'position:fixed;' ,'bottom:0px;' ,'left:0px;' ,'z-index:2147483647;' ].join(' '); if (JSEnable) { icon.style.content = '-o-skin("' + ENABLE_ICON + '")'; icon.title = 'JavaScript Enable'; } else { icon.style.content = '-o-skin("' + DISABLE_ICON + '")'; icon.title = 'JavaScript Disable'; } document.body.appendChild(icon); icon.addEventListener('click', function(e){ if (JSEnable){ localStorage.removeItem(ID); icon.style.content = '-o-skin("' + DISABLE_ICON + '")'; icon.title = 'JavaScript Disable'; }else{ localStorage[ID] = 'enable'; icon.style.content = '-o-skin("' + ENABLE_ICON + '")'; icon.title = 'JavaScript Enable'; location.reload(); } }, false); }, false); function cancel(e){ // 外部 .js は BeforeExternalScript に任せる if (e.element.src) return; e.preventDefault(); } function cancel_ex(e){ // Opera Unite のファイルは読み込む if (e.element.src.indexOf('.operaunite.com/') > 0) return; e.preventDefault(); } function afterLoad(e){ if (e.event.target != window) return; opera.removeEventListener('BeforeScript', cancel, false); opera.removeEventListener('BeforeExternalScript', cancel_ex, false); opera.removeEventListener('AfterEvent.load', afterLoad, false); } })();
Opera はアイコン準備する手間が省けて良いですね。
使い方は入れるだけ。
localStorage 使ってるので ON/OFF も簡単。
Bookmarklet と Opera Unite の AutoPagerize SITEINFO Server は使えるようになってます。
愚痴
- Unite とか要らん
UJS Manager 使いたいだけで my.opera に登録しなきゃいかんとかアホらしい。
ローカルファイル扱いたいだけなのにサーバー化って…
AutoPagerize SITEINFO Server も Chrome みたいにバックグラウンドで動かせれば済むものなのに。
- alert が変
alert を表示してから Ctrl + A を押すとページが選択される。…なんで?
内容をコピーしたかったらマウスで選択 or 文字の部分をクリックしてフォーカスを合わせてから Ctrl + A を押したりしないといけない。
他にも alert 表示中に Highlight next URL アクションが1度動かせるし、動かしたあとで Back すると alert 閉じた後に戻る…。
全体的に作りが結構いいかげんな感じ(ぇ
- タイトルバーが微妙
いつからだったかタブバーとタイトルバーが統合できるようになったけど、XP の標準のタイトルバーと統合するのは変。
統合時のタイトルバーもスキンに含めちゃえば見た目の統一感も出るし、クラシックスタイルでもタイトルバー隠せるのに。
「元のサイズに戻す」で小窓化したときは専用のタイトルバー用意してるのになんで?って感じ。
その他
- サイト別設定に「標準の設定を利用」する機能がないのは相変わらず
- UserJS も管理放棄されてるのも相変わらず
- Icon Creator は良いw アルファチャンネルも指定できると良いなぁー