JavaScriptで子要素追加をIE6でも動くようにするには
2011年10月25日 16時28分
jQueryでappendやprependを使って要素を使っていたらIE6で思ったように動かなかった。
検索してみると似たような人を見つけた。
http://d.hatena.ne.jp/nitoyon/20090219/object_jquery
上の指摘通りにjQueryをあきらめてdocument.createElementで作成したらうまくいった。
以下のような感じ。
|
var img_next = document.createElement("img"); img_next.src = "./img/next_btn.png"; img_next.className = "class_img"; var main = document.getElementById("main"); main.insertBefore(img_next, main.firstChild); |
iPhoneで参考書を読む
2011年10月23日 01時36分
最近、電車での暇つぶしの為にiPhoneでの電子辞書で参考書を読むということを行っている。
そもそもの理由は会社を変えた時に自分の業務内容がサーバサイドだけでなくフロントエンド側の処理も求められるようになったのと、多少通勤時間が延びたのが切っ掛けだ。
最初は紙媒体で読んでいたのだが参考書というのはどの分野でも分厚いものが多い。
まして東京の満員電車の中で読むとなると片手で吊り革を持ちつつ片手で本を開くという上体になるのだから5分も経たないうちに腕や指が痛くなっていた。
これを解決する為にどうすれば良いか思案していたらAmazonの電子書籍参入間近のニュースを見てこれだと思い検討してみた。
まずは俗にいう自炊。
裁断機を買いページスキャナをレンタルするか購入して行う場合と外部業者に本を発送しデータを受け取る2パターンがある。
現状、最新の書籍が電子書籍で発売されているケースは稀。自分で作るのだからその部分は問題にならないのがメリットだ。
しかし、手間がかかる上に既にある紙媒体を裁断しなくてはならない。
また外部業者に委託するやり方は法律的にグレーゾーンらしく今後はどう展開されていくか注意が必要。
http://sankei.jp.msn.com/life/news/110905/art11090521090006-n1.htm
次にタブレット型端末での電子書籍購入。
これは通勤時間が延びたとはいえ30分にも満たない時間なので却下。
最後に既に使用しているiPhoneでの電子書籍。
漫画などは広く展開されているようだがIT系の参考書に限ってはいまいち動きが鈍いように思う。
そんな中で実際に書籍を購入したサイトが以下になる。
O’Reilly Japan Ebook Store
http://www.oreilly.co.jp/ebook/
Gihyo Digital Publishing
http://gihyo.jp/dp
上のO’Reillyの方はPDFで、Gihyoは書籍によって形式は異なるが購入したものはEPUBという形式での配布だった。
PDFの場合は自分で編集ができるのでトリミングしてiPhoneでも可能な限り読みやすくなるよう手を加えることができる。
EPUBの場合はもともと電子書籍用のフォーマットのおかげか何も編集しなくても画面の小さいiPhoneでもとても読みやすかった。
オープンなフォーマットで配布してもらえるのはアプリを選択できてとても好感が持てる。
しかし両サイトとも発売からしばらくたったものしかおいておらず、Gihyoに至っては雑誌を除けば5点程度しかない状態だ。
IT業界こそ先陣を切って開拓していって欲しい分野なので今後も各出版社の動向を見守っていきたい。
IE8で「オブジェクトでサポートされていないプロパティまたはメソッドです」と表示される
2011年10月17日 17時44分
仕事中、既存システムで変な症状が報告された。
|
a = b; //←「オブジェクトでサポートされていないプロパティまたはメソッドです」 |
ひねりも何もない代入だけの行でエラーが発生している。
調べてみるとタグのIDと変数名がぶつかっていると発生するエラーということが判明。
なので変数名を変更して解決。
必要ないところでグローバル領域を使用しているのもどうかと思うがIEがID名で変数を作ってしまうのはとても厄介。
はまらないように気を付けよう。
※ネットで突込みを見つけたので追記 2012/06/06
http://b.hatena.ne.jp/entry/www.crossl.net/blogwww.crossl.net/blog/ie8_err_nothing_prop_method/
referer見てたら見馴れないリンク元があったので見てみたら記事に対する突込みがあった。
※引用
違うと思う。var で変数宣言しろってのが本筋だと思う。まあID属性値がそのままグローバルオブジェクトのプロパティになるのもどうかと思うけど。
ということで書き殴り全開のこの記事にまさかの突込みをいただいたので掘り下げてみた。
Case.1
|
<html> <head>~</head> <body> <span id="a">hoge</span> <script type="text/javascript"> a = 1; // エラー </script> </body> </html> |
Case.2
|
<html> <head>~</head> <body> <span id="a">hoge</span> <script type="text/javascript"> var a; a = 1; // エラーなし </script> </body> </html> </script> |
Case.3
|
<html> <head>~</head> <body> <span id="a">hoge</span> <script type="text/javascript"> b = 1; // エラーなし </script> </body> </html> |
勿論確認はIE8。
指摘にあった通り、タグIDと同じ名前で変数宣言するとエラーは発生しなかった。
しかしこの記事で言いたかったことはその事ではない。
Case.1とCase.3の変数名による違いである。
Case.1の場合、ウォッチで変数aを見てみるとDispHTMLSpanElementというオブジェクトになっている。
そこへの代入でエラーが発生する。
Case.2の場合、代入前の変数aはundefinedになり代入が可能となる。
var宣言は変数の巻上げが起こるのでどこでされようと最初に変数は定義される。
Case.3のタグIDと変数名が違う場合、JavaScirptは明示的にvarで宣言しなかった場合グローバルオブジェクトのプロパティとして扱われエラーとはならない。
この記事を書いたときには勘違いしていたがCase.1をFirefoxで動かしてみたら代入でエラーが出ないだけで変数aはオブジェクトとして存在していた。
よくよく考えてみればwindow[‘タグID’]見たいなアクセスが出来るのはグローバルオブジェクトのプロパティとして存在しているからだからタグIDの変数が出来るのは当然か。
IEだけ代入時に問答無用でエラーが発生するから誤解してしまった。
しかし指摘通りにvarでタグIDと同じ変数を宣言してしまうと示す変数が変わってしまい以下のような記述が出来なくなってしまうので注意が必要。
|
<html> <head>~</head> <body> <span id="a">hoge</span> <script type="text/javascript"> // var a; を宣言しているとwindow['a']がタグオブジェクトでなく変数undefinedになりエラーとなる。 alert(window['a'].outerHTML); // <span id="a">hoge</span> </script> |
やはりタグIDとJavaScirptの変数名は分けることが懸命という結論。
CSEでMySQL(utf8)が文字化け。
2011年10月05日 13時31分
会社が変わって環境が大幅に変わっている。
今まではALL Microsoft製品で固められていてGUIが必ずある前提だったのでLAMP環境になって開発環境もフリーのものをがつがつ使っている。
しかし組み合わせが色々とあるので相性問題なども発生することが多く、今まで煩わされなかったことに苦労して改めてお互いの長所と短所を噛みしめている次第だ。
ODBCなんて何年ぶりだろうという状態なのだ。
とりあえずMySQLメモ。
CSEでutf8のデータベースが文字化けする。
参考サイト
http://okwave.jp/qa/q4346389.html
1.
my.cnfの[mysqld]に
skip-character-set-client-handshake
を追加
CSE上で
SET NAMES SJIS
で症状が改善した。
subversionでのエラー【relocate 参照 url の変更 を実行してください
2011年09月22日 14時56分
リポジトリは恒久的に へ移動しました。relocate 参照 url の変更 を実行してください
subversionを設定していざファイル登録してみたら上のようなエラーメッセージが出た。
どっかで設定ミスったかなぁと思って調べてみるとmod_svnでの仮想パスと実パスが同じだと発生するエラーの模様。
参考先:
http://www.hinet.mydns.jp/tdiary/?date=20050317#p02
|
<Location /svn> DAV svn - SVNParentPath /etc/svn + SVNParentPath /etc/svnrepository .... </Location> |
※勿論、実パスの方も変更すること