m2O

2007/05/18 (金)

スピードダイヤル

|  スピードダイヤル - m2O を含むブックマーク

SDブックマークレットが使えるんですね。

Browser.js 【TB企画】Opera:みなさんのSpeed Dialの使い方を教えてください

スピードダイヤル、はじまったな。

f:id:miya2000:20070518131811p:image

1:
javascript:location.href='data:text\/html;charset=utf-8,<html><head><style>body{text-align:center;font-size:45em}<\/style><\/head><body><script type="text\/javascript">document.write(new Date().getMonth()+1)<\/script><\/body><\/html>'
2:
javascript:location.href='data:text\/html;charset=utf-8,<html><head><style>body{text-align:center;font-size:45em}<\/style><\/head><body>月<\/body><\/html>'
…
9:
javascript:location.href='data:text\/html;charset=utf-8,<html><head><style>body{text-align:center;font-size:45em}<\/style><\/head><body><script type="text\/javascript">document.write((\'0\'+new Date().getSeconds()).slice(-2))<\/script><\/body><\/html>'

おまけ

javascript:location.href='data:text\/html;charset=utf-8,<html><head><style>body{background:white} table{text-align:center;font-size:6em;margin:auto} .sun{color:red} .sat{color:blue} .exc{color:#AAA} .today{background:#AAF}<\/style><\/head><body><script type="text\/javascript">(function(p){var s=[\'<table border="1"><tr><th>日<th>月<th>火<th>水<th>木<th>金<th>土\'],c=new Date(p),M=p.getMonth(),D=p.getDate(),i,m,d,e,W=[\'sun\',,,,,,\'sat\'];c.setDate(1);if(c.getDay())c.setDate(1-c.getDay());do{s.push(\'<tr>\');for(i=0;i++<7;)m=c.getMonth(),d=c.getDate(),e=c.getDay(),s.push(\'<td class="\'+(M!=m?\'exc\':(W[e]||\'wek\'))+(M==m&&D==d?\' today\':\'\')+\'">\'+d),c.setDate(d+1)}while(M==m);document.write(s.join(\'\')+\'<\/table>\');})(new Date())<\/script><\/body><\/html>'

--

追記
↑のカレンダーが Opera9.5 Alpha で動かなかったので修正しました。「do{~}while(M==m)<string>;」(セミコロン追加)。

--

dataスキームそのまま突っ込んでよかった…orz。

--

まあ実際は1マスでいいよね。

data:text/html;charset=utf-8,<html><head><title>dial:http://www.google.co.jp/</title><style>body{background:white;text-align:center;font-size:8.2em;font-family:serif;padding-top:50px}img{margin-top:50px}</style></head><body><script type="text/javascript">window.onload=function(){location.replace('http://www.google.co.jp/')};var d=new Date();document.write(d.getFullYear()+'/'+('0'+(d.getMonth()+1)).slice(-2)+'/'+('0'+d.getDate()).slice(-2)+' ('+['日','月','火','水','木','金','土'][d.getDay()]+')')</script><br><img src="http://www.google.co.jp/intl/ja_jp/images/logo.gif" width="90%"></body></html>

クリックで Google を表示するようにしてみました。スピードダイヤルで表示されるプレビューは onload イベント直前の状態のようですね(DOMContentLoadedだとプレビューが Google になる)。

これでも問題ないんですが、onload イベントで Google に移動してますから、移動前に少しだけプレビューと同じ画面が表示されてしまいます。
これがイヤな場合は dataスキームに対する user.js によって多少マシに出来ます。スピードダイヤルのプレビューには user.js が適用されないみたいなので、クリックで表示したときだけ実行するスクリプトを書くことができるのです!(やっと使い道が見つかった!)

user.js
// ==UserScript==
// @name Speed Dial - replace location.
// @version 1.0.0
// @include data:text/html;charset=utf-8
// ==/UserScript==
if(/dial:(http:\/\/.*)/.exec(document.title)){
    location.replace(RegExp.$1)
}

これで dataスキームの title を「dial:http://~」にすれば、わりと直ぐその URL に移動します。

--

追加

スクリーンショットより代替画像を表示したいと思ったので。(Opera側で対応してくれんかな? )

data:text/html;charset=utf-8,<html><head><title>dial:http://jp.opera.com/</title><script></script><style>body{background:white;text-align:center;}img{width:70%;margin:60px 0 0 -80px;}</style></head><body><img src="http://promote.opera.com/logos/Opera4.jpg"></body></html>

f:id:miya2000:20070529120509p:image:small

目立ちすぎるから僕は使わないけど。

一見無駄な script 要素を入れてるのは user.js を画像の表示前に実行させるためです。このことは「Opera のユーザーJavaScript は「.js」か「.user.js」かで実行されるタイミングが違う」で書いてます。

あと上で書いてるカレンダー、自動更新を長めにしてるとなかなか更新してくれないですね。スピードダイヤルを開きっぱなしでXX分ってことなのかな? 「最終更新時間からXX分」にしてほしいなあ。

それから「表示する毎に更新」が欲しい。ネタとしてスロットマシンみたいなのを考えてたんだけどね。