opera:cache等に機能追加をするブックマークレット
Kurumaさんの仰る事に全く同感
edvakfさんのエントリーを通じて知ったopera:cacheにadvanced searchを追加する方法が素晴らしいのでBookmarkletとして覚え書きしておきます。
原典では言語ファイルを書き換える方法が紹介されています。こちらの方が圧倒的に使いやすいのですが、如何せん言語ファイルは適宜更新されるのが問題です。書き換えを忘れてしまいますからね。
何があろうとブックマークは引き継ぐので忘れませんから、私はブックマークレットで利用することにします。
なので、真似をして覚書を書いておく事にしました。
が少し便利になります。対象にしている Opera のバージョンは、
Desktop の V9.50 , V9.27 , V8.54
Opera Mbile V8.65
です。って言うか、たぶん V8.50(?) 以上でブックマークレットの動く Opera なら動くと思います。
尤も、原作者(Lex1)さんは V9.00 以上を想定して作っていますから V8.xx系では多少制限があります。
opera:のブックマークレット
javascript:(function(){var S=document.createElement('script');S.src='http://borbis.web.fc2.com/js/OperaColonBml.js';document.body.appendChild(S);})();
OperaColonBml.js
// ==UserScript== // @name OperaColon // @include opera:* // @namespace http://my.opera.com/Lex1/blog/ // @namespace http://my.opera.com/Kuruma/blog/2008/04/02/opera-cache-bookmarkl // @namespace http://my.opera.com/borbis/blog/ // @namespace http://d.hatena.ne.jp/borbis/ // @author borbis // @version 0.0.1 // ==/UserScript== (function(){ if(location.href.indexOf('opera:')!=0){ return; } var OperaVersion='9.00'; if( /Opera[ \/]([\d\.]+)/.test(navigator.userAgent) ){ OperaVersion=RegExp.$1; // Opera (Mobile) 8.xx } if(location.href=='opera:plugins'){ opera_plugins(); } if(location.href=='opera:cache'){ opera_cache(); } if(location.href=='opera:about'){ opera_about(); } if(location.href.indexOf('opera:illegal-url')==0){ opera_illegal_url(); } /* * Referr to http://my.opera.com/Lex1/blog/show.dml/1732590 */ function opera_plugins(){ if(OperaVersion >= 9.00){ opera_plugins9(); }else{ opera_plugins8(); } } function opera_plugins9(){ // -1303632626="Plug-ins<script type='text/javascript'> // document.addEventListener('load',function() { var p=navigator.plugins; var t=document.getElementsByTagName('tbody'); for(var i=0, ti; ti=t[i]; i++){ ti.innerHTML='<TR><TD>Description:</TD><TD>'+(p[i].description ? p[i].description : 'Plug-in disabled')+'</TD></TR>'+ti.innerHTML }; // },false) // </script>" } /* * Referr to http://my.opera.com/Lex1/blog/show.dml/1732590#comment4662814 */ function opera_plugins8(){ // javascript: var flashversion = function(){ var p; if (((p = navigator.plugins) && (p = p["Shockwave Flash"]) && (p = p.description)) || ((p = window.ActiveXObject) && (p = new p("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")))){ return p; // return p.replace(/^\D+/, '').split(/\D+/g); } return 'Plug-in disabled'; // return null; }(); alert(flashversion) } /* * Referr to http://d.hatena.ne.jp/edvakf/20080326/1206511024 */ function opera_cache(){ if(OperaVersion >= 9.00){ opera_cache9(); }else{ opera_cache8(); } } function opera_cache9(){ // -1713924769="Size<script type='text/javascript'> // document.addEventListener('load',function() { for(var i=0; document.links[i]; i++){document.links[i].target = '_blank'}; var l = document.getElementsByTagName('tr'); var sf=document.createElement('input'); sf.type = 'text'; sf.defaultValue='Search'; sf.style='margin:0 4px;float:right'; sf.addEventListener('focus',function(){ if(this.value==this.defaultValue){this.value='';} },false); sf.addEventListener('blur',function(){ if(!this.value){this.value=this.defaultValue;} },false); sf.addEventListener('keyup',function(){ var v=this.value; for(var i=0, li; li=l[i]; i++){ var p=li.lastChild.firstChild.innerText; if(p && p.indexOf(v)==-1){li.style='display: none'} else {li.style='display: table-row'}; } },false); var inp=document.createElement('input'); inp.type='button'; inp.value='Thumbnails'; inp.style='float:right;'; inp.addEventListener('click', function(){ var b=/\.(jpe?g|bmp|gif|png|ico|swf|flv)$/i; var f=/\.(swf|flv)$/i; for(var i=0, li; li=l[i]; i++){ var p=li.lastChild.firstChild; var c=li.lastChild.firstChild.innerText; if(li.offsetHeight!=0 && p.childNodes.length<2){ if(b.test(c)){ var stl='float:right; border:1px dotted black; margin:1px; padding:1px;'; if(f.test(c)){ var dv=document.createElement('div'); p.appendChild(dv); dv.innerHTML='<embed src='+p.href+'>'; var fh=dv.firstChild; fh.setAttribute('height', 100); fh.setAttribute('width', 100); fh.setAttribute('style', stl+' content:normal; outline:none; color:inherit'); } else { var image=document.createElement('img'); image.setAttribute('src',p.href); if(!image.height || image.height>100){image.height='100'}; if(!image.width || image.width>100){image.width='100'}; image.setAttribute('style', stl); p.appendChild(image); } } } }; }, false); var th=document.getElementsByTagName('th')[2]; th.appendChild(inp);th.appendChild(sf); // },false) // </script>" } /* * Referr to http://my.opera.com/borbis/blog/show.dml/1849569 */ function opera_cache8(){ // 21418="Size<script type='text/javascript'> // document.addEventListener('load',function() { for(var i=0; document.links[i]; i++){document.links[i].target = '_blank'}; var l = document.getElementsByTagName('tr'); var sf=document.createElement('input'); sf.type = 'text'; sf.defaultValue='Search'; sf.style='margin:0 4px;float:right;'; sf.addEventListener('focus',function(){ if(this.value==this.defaultValue){this.value='';} },false); sf.addEventListener('blur',function(){ if(!this.value){this.value=this.defaultValue;} },false); sf.addEventListener('keyup',function(){ var v=this.value; for(var i=0, li; li=l[i]; i++){ var p=li.lastChild.firstChild.innerText; if(p && p.indexOf(v)==-1){li.style='display: none'} else {li.style='display: table-row'}; } },false); var inp=document.createElement('input'); inp.type='button'; inp.value='Thumbnails'; inp.style='float:right;'; inp.addEventListener('click', function(){ var b=/\.(jpe?g|bmp|gif|png|ico|swf|flv)$/i; var f=/\.(swf|flv)$/i; for(var i=0, li; li=l[i]; i++){ var p=li.lastChild.firstChild; var c=li.lastChild.firstChild.innerText; if(li.offsetHeight!=0 && p.childNodes.length<2){ if(b.test(c)){ var stl='float:right; border:1px dotted black; margin:1px; padding:1px;'; if(f.test(c)){ var dv=document.createElement('div'); p.appendChild(dv); dv.innerHTML='<EMBED src='+p.href+'>'; var fh=dv.firstChild; fh.setAttribute('height', 100); fh.setAttribute('width', 100); fh.setAttribute('style', stl+' content:normal; outline:none; color:inherit;'); } else { var image=document.createElement('img'); image.setAttribute('src',p.href); if(!image.height || image.height>100){image.height='100'}; if(!image.width || image.width>100){image.width='100'}; image.setAttribute('style', stl); p.appendChild(image); } } } }; }, false); var td=document.getElementsByTagName('td')[2]; td.appendChild(inp); td.appendChild(sf); // },false) // </script>" } /* * Referr to http://my.opera.com/Lex1/blog/show.dml/1014525 */ function opera_about(){ if(OperaVersion >= 9.00){ opera_about9(); }else{ opera_about8(); } } function opera_about9(){ // 1557681688="Preferences<script type='text/javascript'> // window.addEventListener('load',function() { var l = document.getElementsByTagName('dd'); for(var i=6, li; li=l[i]; i++){ li.innerHTML='<a href=file://localhost/'+li.innerHTML.replace(/\\\\/g,'/').replace(/ /g,'%20')+'>'+li.innerHTML+'</a>' }; // },false) // </script>" } function opera_about8(){ // 11708="Preferences<script type='text/javascript'> // window.addEventListener('load',function() { var l = document.getElementsByTagName('td'); for(var i=7, li; li=l[i]; i++){ if(li.previousSibling==null){continue;} li.innerHTML='<a href=file://localhost/'+li.innerHTML.replace(/\\\\/g,'/').replace(/ /g,'%20')+'>'+li.innerHTML+'</a>' }; // },false) // </script>" } /* * Referr to http://my.opera.com/Lex1/blog/show.dml/1014525 * http://files.myopera.com/Lex1/files/english.zip */ function opera_illegal_url(){ if(OperaVersion >= 9.00){ opera_illegal_url9(); }else{ opera_illegal_url8(); } } function opera_illegal_url9(){ // 1150263995="contains characters that are not valid in the location they are found.<script type='text/javascript'> // document.addEventListener('load',function() { var st = document.getElementsByTagName('cite')[0].innerHTML.substr(7); if(!prompt('Do you want to search this URL?',st))return; if(document.location.host!='www.google.com'){ document.location = 'http://www.google.com/search?client=opera&rls=en&sourceid=opera&ie=utf-8&oe=utf-8&q=' + encodeURIComponent(st.replace(/ /,'+')) }; // },false) // </script>" } function opera_illegal_url8(){ // 70528="contains characters that are not valid in the location they are found.<script type='text/javascript'> // document.addEventListener('load',function() { var st = document.getElementsByTagName('strong')[0].innerHTML; if(!(/\shttps?:\/\/(.+?)\s+(contains characters that|)/.test(st)))return; st = RegExp.$1; if(!prompt('Do you want to search this URL?',st))return; if(document.location.host!='www.google.com'){ document.location = 'http://www.google.com/search?client=opera&rls=en&sourceid=opera&ie=utf-8&oe=utf-8&q=' + encodeURIComponent(st.replace(/ /,'+')) }; // },false) // </script>" } })();
なんと言うかダサダサなのですが、言語ファイルを更新するときの為の参考にでもなれば良いかと、、、、、
言語ファイルの順番どおりに並べてありますし。
Opera Mobile で言語ファイルを書き換える際には↓を参考にするのも良いかと思います。(文字数制限を回避できます。)
The Opera blog
実は、当初ブックマークレットにするよりも UserJS にしてしまえばブックマークレットを呼び出す手間が省けてよさげかもって思って実際 UserJS にして見たのですが、なんと、 Opera は opera:xxxx の URL については UserJS を全く呼び出してくれませんでした。
追記
opera:illegal-url の URL について補足しておきます。
「読んで字の如し」と言ってしまえばそれまでですがどうやら次のような URL を対象にしているようです。
参考:「ほんとうは怖い国際化ドメイン名」@水無月ばけらのえび日記