2006/07/27: Flashでウィンドウを閉じる
ウェヴブラウザを閉じる場合
↑これしかないのかと思っていたら、こういう方法もあった↓
FlashPlayerを閉じる場合
getURL("javascript:window.close()");
↑これしかないのかと思っていたら、こういう方法もあった↓
FlashPlayerを閉じる場合
fscommand("quit");
2006/07/21: 長いURLや長い半角文字の単語を折り返す方法
よくmixiやらBLOGやらなんやらで、凄く長いURLや凄く長い半角文字の単語とかを貼り付けたときに、URLが折り返されずにレイアウトがぐちゃぐちゃに崩れたりしていることがありますが、こういう問題の解決策がやっと見つかりました。
CSSで、
と書けば良いみたいです。
ちなみにこれが適用されるのは、IE5以上のみで、IEの独自仕様だそうなので、その他のブラウザでは折り返されないようです。
あと、word-breakに関してですが、他の設定は以下の通りです。
CSSでなくても良い場合は、他にもこんな解決方法があるようです。
CSSで、
word-break:break-all;
と書けば良いみたいです。
ちなみにこれが適用されるのは、IE5以上のみで、IEの独自仕様だそうなので、その他のブラウザでは折り返されないようです。
あと、word-breakに関してですが、他の設定は以下の通りです。
word-break:normal; /* デフォルト:英文のみ単語の切れ目で改行 */
word-break:break-all; /* 英文、和文共に単語の途中でも改行 */
word-break:keep-all; /* 英文、和文共に単語の切れ目で改行 */
CSSでなくても良い場合は、他にもこんな解決方法があるようです。
2006/07/20: FlashのダイナミックテキストのletterSpacingを調整するときのポイント
ダイナミックテキストのletterSpacingの調節についてですが、意外と苦戦したのでメモしておきます。
たとえば、test_TFという名前のTextFieldオブジェクトがあって、その中の文章のletterSpacingを変えたいとします。
このとき、以下のようなスクリプトを実行するとletter spacingを変えることができます。
が、しかし!!!
これで安心してはいけません。
ここで、このテキストの中身を操作すると、
また元通り、letterspacingが0に戻ってしまうのです。
なので、
test_TF.text += "1234";
といったようにテキストの中身を変化させたら、そのあとに、もう一度、letter spacingを設定しなおさないといけないようでした。
上記のプログラムでテキストフォーマットの設定部分を関数にしていたのはそのためです。
test_TF.text += "1234";
setLetterSpacing();
みたいな感じで使いましょう。
var format の部分は、関数の外で定義した方が賢いような気がしますが、とにかくテキスト変更のあとに、もう一度テキストフォーマットを再設定しましょうということで。
もし他にいい方法があれば是非ご教授ください。
たとえば、test_TFという名前のTextFieldオブジェクトがあって、その中の文章のletterSpacingを変えたいとします。
このとき、以下のようなスクリプトを実行するとletter spacingを変えることができます。
var test_TF:TextField;
test_TF.text = "abcd";
function setLetterSpacing()
{
var format:TextFormat = new TextFormat();
format.letterSpacing = 2;
test_TF.setTextFormat(format);
}
setLetterSpacing();
が、しかし!!!
これで安心してはいけません。
ここで、このテキストの中身を操作すると、
また元通り、letterspacingが0に戻ってしまうのです。
なので、
test_TF.text += "1234";
といったようにテキストの中身を変化させたら、そのあとに、もう一度、letter spacingを設定しなおさないといけないようでした。
上記のプログラムでテキストフォーマットの設定部分を関数にしていたのはそのためです。
test_TF.text += "1234";
setLetterSpacing();
みたいな感じで使いましょう。
var format の部分は、関数の外で定義した方が賢いような気がしますが、とにかくテキスト変更のあとに、もう一度テキストフォーマットを再設定しましょうということで。
もし他にいい方法があれば是非ご教授ください。
2006/07/18: Google Dance Checker ― グーグルでの検索結果順位を色々調べられるサイト
以前使っていた、ページランクを調べられるサイトが閉鎖されていたので、新たなサイトをメモ。一時はページランクこそ全てと、言われていましたが今では関係ないとまで言われています、でもまぁ、一つの指標としてそういうのもあるという感じでチェックできれば、という感じです。
今回紹介するGoogle Dance Checkerというサイトは、被リンク数を調べたり、ランキングの推移を記録したりすることもできるようで、かなり面白そう。あと、グーグルの12個あるサーバでそれぞれどんなランキングになっているかを比較することもできるようで、かなりマニアックだ。
あと、使えそうなのは、グーグル・ランキング・チェッカーってので、任意の検索語で自分のサイトが何位になるかを調べることができる。200位以内にランクインしていないと表示されないみたいだけど、すぐに結果が見れるので凄く便利。これで次のページのリンクをクリックしなくても済むわけだ。
これで、他の検索エンジンでの順位とかもいっきに調べられたら最強なんだけどね。
そういうのがあったら是非紹介してください。
2006/07/15: コード記述用CSS
2006/07/09: テキストフォームの中で、選択したテキストを<a>タグで挟む。
ブログなんかでよくみかけるJavaScriptを利用したタグ挿入機能。
Nucleusのソースから必要な箇所だけ抜き出してみた。
Mozilla系ブラウザへの対応で、とても複雑になっている。
だが、これでもMacIEでは選択範囲がうまく取れずに最後尾にタグが挿入されるバグがある(当然Nucleusでも解決されていない)。
こんなかんじ
JavaScript
リンク挿入ボタン
テキストエリア
↑
※注意
idの名前は、name属性と統一する。
つまり、
name="text" → id="inputtext"
name="name" → id="inputname"
といった感じ。
2006.07.25 mio
Nucleusのソースから必要な箇所だけ抜き出してみた。
Mozilla系ブラウザへの対応で、とても複雑になっている。
だが、これでもMacIEでは選択範囲がうまく取れずに最後尾にタグが挿入されるバグがある(当然Nucleusでも解決されていない)。
こんなかんじ
JavaScript
function ahrefThis() {
if (document.selection)
strSelection = document.selection.createRange().text;
else
strSelection = '';
strHref = prompt("Create a link to:","http://");
if (strHref == null) return;
var textpre = "<a href=\"" + strHref.replace(/&/g,'&') + "\">";
insertAroundCaret(textpre, "</a>");
}
// stores the caret
var lastSelected, lastCaretPos;
function storeCaret (textEl) {
// store caret
if (textEl.createTextRange)
lastCaretPos = document.selection.createRange().duplicate();
// also store lastselectedelement
lastSelected = textEl;
nonie_FormType = textEl.name;
scrollTop = textEl.scrollTop;
}
// inserts text at caret (overwriting selection)
function insertAtCaret (text) {
var textEl = lastSelected;
if (textEl && textEl.createTextRange && lastCaretPos) {
var caretPos = lastCaretPos;
caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
} else if (!document.all && document.getElementById) {
mozReplace(document.getElementById('input' + nonie_FormType), text);
if(scrollTop>-1) {
document.getElementById('input' + nonie_FormType).scrollTop = scrollTop;
}
} else if (textEl) {
textEl.value += text;
} else {
document.getElementById('input' + nonie_FormType).value += text;
if(scrollTop>-1) {
document.getElementById('input' + nonie_FormType).scrollTop = scrollTop;
}
}
updAllPreviews();
}
// inserts a tag around the selected text
function insertAroundCaret (textpre, textpost) {
var textEl = lastSelected;
if (textEl && textEl.createTextRange && lastCaretPos) {
var caretPos = lastCaretPos;
caretPos.text = textpre + caretPos.text + textpost;
} else if (!document.all && document.getElementById) {
mozWrap(document.getElementById('input' + nonie_FormType), textpre, textpost);
if(scrollTop>-1) {
document.getElementById('input' + nonie_FormType).scrollTop = scrollTop;
}
} else {
document.getElementById('input' + nonie_FormType).value += textpre + textpost;
if(scrollTop>-1) {
document.getElementById('input' + nonie_FormType).scrollTop = scrollTop;
}
}
updAllPreviews();
}
/* some methods to get things working in Mozilla as well */
function mozWrap(txtarea, lft, rgt) {
var selLength = txtarea.textLength;
var selStart = txtarea.selectionStart;
var selEnd = txtarea.selectionEnd;
if (selEnd==1 || selEnd==2) selEnd=selLength;
var s1 = (txtarea.value).substring(0,selStart);
var s2 = (txtarea.value).substring(selStart, selEnd)
var s3 = (txtarea.value).substring(selEnd, selLength);
txtarea.value = s1 + lft + s2 + rgt + s3;
}
function mozReplace(txtarea, newText) {
var selLength = txtarea.textLength;
var selStart = txtarea.selectionStart;
var selEnd = txtarea.selectionEnd;
if (selEnd==1 || selEnd==2) selEnd=selLength;
var s1 = (txtarea.value).substring(0,selStart);
var s2 = (txtarea.value).substring(selStart, selEnd)
var s3 = (txtarea.value).substring(selEnd, selLength);
txtarea.value = s1 + newText + s3;
}
function mozSelectedText() {
var txtarea = document.getElementById('input' + nonie_FormType);
var selLength = txtarea.textLength;
var selStart = txtarea.selectionStart;
var selEnd = txtarea.selectionEnd;
if (selEnd==1 || selEnd==2) selEnd=selLength;
return (txtarea.value).substring(selStart, selEnd);
}
リンク挿入ボタン
<input type="button" value="リンク挿入" onClick="ahrefThis()">
テキストエリア
<textarea
name="body" id="inputbody"
onkeyup="storeCaret(this); updPreview('body');"
onclick="storeCaret(this);"
onselect="storeCaret(this);"
tabindex="20" cols="60" rows="20">
</textarea>
↑
※注意
idの名前は、name属性と統一する。
つまり、
name="text" → id="inputtext"
name="name" → id="inputname"
といった感じ。
2006.07.25 mio
2006/07/07: Background Image Maker (ウェブ上で背景画像を生成可能)
結構便利なのでURLをメモっときます。
タイトルにあるとおり、ウェブ上でweb2.0ライクな(?)背景画像を簡単に作れます。
シマシマとか、グラデとか、縦縞とか横縞とかね。
Background Image Maker
解説はこちら
2006/07/01: Flash版Cookie【sharedObj】
「sharedObj」というものの存在は知っていたが、使えていなかった。以前少し使ってみた時は、保存してるはずなのにどこにもファイルが見つからなくて、結局あきらめてしまっていた。
うまくいかなかった原因は、sharedObjのことを『Flashがローカルに保存できるファイルの形式』と捉えていたのでうまくいかなかったようだ。ちゃんと調べてみると、何てことはない。sharedObjは『Flash版Cookie』だった。例えば、
http://www.karappo.net/A/test.swf
のようなアドレスに置かれたSWF内で
などと、sharedObjが呼び出されると、ローカルの下記フォルダのsharedObj(.solが拡張子)
が読み込み、もしくは作成される。この時の保存先は、
> Macの場合
User/Library/Preferences/Macromedia/Flash Player/#SharedObjects/
TSGAQQ6S/www.karappo.net/A/test.swf/mySO.sol
> Winの場合
C:\Documents and Settings/User/Application Data/Macromedia/Flash Player/#SharedObjects/
GUW2QVQB/www.karappo.net/A/test.swf/mySO.sol
注意:Windowsの場合、「Application Data」は隠しフォルダになっているのでメニューバーの「ツール」→「フォルダオプション」→「表示」で「全てのファイルとフォルダを表示する」にチェックしておかないと、見えません。
TSGAQQ6SやGUW2QVQBの部分は環境によって違うみたい。その後に続く階層がそのままオンラインの階層関係と一致している。同じSWF内で別の名前のsharedObjを呼び出すと.../test.swf/内に追加される仕組み。試しに自分の環境を見てみると、意外と知らないうちに保存されている(↓図)。ローカルのSWFからも..#SharedObjects/GUW2QVQB/localhost/以下に保存される。
まさに、Cookie(しかも簡単!)今までは「ローカルに保存」=「SWFと同じ階層に保存」と、何故か完全に勘違いしていたのだった。
実際に書き込む時、参照する時は、
のように書く。
普通は終了時に書き込まれるらしいので、即時書き込みしたい時は、
と書く。
うまくいかなかった原因は、sharedObjのことを『Flashがローカルに保存できるファイルの形式』と捉えていたのでうまくいかなかったようだ。ちゃんと調べてみると、何てことはない。sharedObjは『Flash版Cookie』だった。例えば、
http://www.karappo.net/A/test.swf
のようなアドレスに置かれたSWF内で
var mySO = SharedObject.getLocal("mySO");
などと、sharedObjが呼び出されると、ローカルの下記フォルダのsharedObj(.solが拡張子)
が読み込み、もしくは作成される。この時の保存先は、
> Macの場合
User/Library/Preferences/Macromedia/Flash Player/#SharedObjects/
TSGAQQ6S/www.karappo.net/A/test.swf/mySO.sol
> Winの場合
C:\Documents and Settings/User/Application Data/Macromedia/Flash Player/#SharedObjects/
GUW2QVQB/www.karappo.net/A/test.swf/mySO.sol
注意:Windowsの場合、「Application Data」は隠しフォルダになっているのでメニューバーの「ツール」→「フォルダオプション」→「表示」で「全てのファイルとフォルダを表示する」にチェックしておかないと、見えません。
TSGAQQ6SやGUW2QVQBの部分は環境によって違うみたい。その後に続く階層がそのままオンラインの階層関係と一致している。同じSWF内で別の名前のsharedObjを呼び出すと.../test.swf/内に追加される仕組み。試しに自分の環境を見てみると、意外と知らないうちに保存されている(↓図)。ローカルのSWFからも..#SharedObjects/GUW2QVQB/localhost/以下に保存される。
まさに、Cookie(しかも簡単!)今までは「ローカルに保存」=「SWFと同じ階層に保存」と、何故か完全に勘違いしていたのだった。
実際に書き込む時、参照する時は、
mySO.data.○○ = △△;
□□ = mySO.data.○○ ;
のように書く。
普通は終了時に書き込まれるらしいので、即時書き込みしたい時は、
mySO.flush();
と書く。