2007/06/01

P_BLOG での JavaScript 関連の問題を改善

P_BLOG の scripts.js の不具合

P_BLOG のフォーラムで、JavaScript 絡みと思われる問題が散見されます。

原因になりそうなことに心当たりがあったので、先日、この JavaScript 関連の問題を修正してみました。他の方にも有益だと思いますので、公開することにします。

P_BLOG ver.1.2β2 以降を導入している方が対象です。ver.1.2β1 以前に導入すると整合性が取れず、絶対おかしくなるので、やめておいてください。

原理的には解決していると思うのですが、実際に確認していない部分もありますので、これで直ったよ!とか、相変わらずだよ〜とか、フィードバックがあれば、よろしくお願いします。

何を修正したのか

window.onload 問題

scripts.jpclickableCite 関数のすぐ次に

window.onload = clickableCite;

という記述があります。

clickableCite 関数そのものは、P_BLOG で blockquote タグに cite 属性を付けて引用を行った場合に、引用元へのリンクを「→ Source」として付け加えてくれるものです。

しかし、window.onload で関数を呼び出してしまうと、他に load イベントでスクリプトを実行しようとするものがあった場合に、イベントがかち合ってしまい、正しく動かなくなります。

これを回避するために、Firefox や Safari では addEventListenerIE では attachEvent を使うのが定石なようです。

実装方法はいろいろあるのですが、今回は JavaScript & AJAX Tutorials に載っていたコードを使わせてもらいました。

Lightboxあれこれポップアップなどを P_BLOG に導入した際に起こっていた問題は、これで解決されるはずです。(私はこれらを使っていませんので、要確認なのですが…。)

Internet Explorer や JavaScript 無効時の挙動を改善

コメント記入欄のスマイリーをクリックすると、コメントを書いている最中にも関わらず、いきなり画面遷移が起こり、いきなりページが読み込まれてしまう問題があります。また、同様のことが IE 以外のウェブブラウザでも、JavaScript が無効であるときには起こります。

この現象が起こっているのには2つの要因がありました。

  1. JavaScript が無効だと、ダミーのリンクが実際に動作してしまう

    JavaScript が有効でないときに、スマイリーをクリックしてページ遷移が起こってしまうのは、各スマイリーにリンクが設定されているからです。

    これを修正するのに一番簡単な方法は、単に a タグをなくして、リンクを外してしまうことです。リンクを外した後に、代わりにどこかに onclick 属性を設定してやれなければいけません。各スマイリーを input type="image" とか、イメージを用いた button に変更しようかと思ったのですが、そこまではやらず、直接画像の img 要素に onclick を設定してみました。

  2. IE の getElementByID のバグ

    JavaScript が有効であるはずの IE で同じ現象が起こっていたのは、JavaScript がエラーで機能していなかったからです。なぜエラーが起こっていたかというと、IE のバグだったのです。

    scripts.jpsmiley 関数に getElementByID("comment") でコメント欄の DOM オブジェクトを取得している箇所があります。一見なんの変哲もない処理ですが、ここに問題が潜んでいました。

    P_BLOG ver.1.2β2 以降では、フォームに name="comment" になっている要素と、id="comment" になっている要素があります。これらは本来別のものなのですが、IE は getElementByID でなぜか id 属性だけでなく name 属性にも反応して、両方が存在すると、getElementByID がエラーを起こしてしまうのです。これがなかなかわからずに、問題解決に苦労しました。

    この IE の不具合は、よく知られている問題なのでしょうか。ざっと検索した感じでは、話題にはなっていないようでした。なお、IE7 では検証していません。IE6 の話です。ただ、IE7 でもこのスマイリーの不具合が起こるという報告があったので、それから推測すると、IE7 でも修正されていないのではないでしょうか。(それとも私が何か勘違いしているだけ?)

    このやっかいな問題を避けるために、form に含まれる要素の名前を変更しています。今のところ、このブログではきちんと動作しているようですが、思わぬ副作用がないとも限りませんので、P_BLOG JavaScript Refurbishment 導入後に不可解な現象が起こったときは、ぜひ報告して下さい。

みなさま、フィードバックお待ちしています。

ポスト @ 23:37:31 | | 「このエントリーを含むはてなブックマーク」ボタン この記事「P_BLOG での JavaScript 関連の問題を改善」を含むはてなブックマークの数

10 Comments

Re: P_BLOG での JavaScript 関連の問題を改善

修正ファイルをありがとうございます。早速、インストールして試用させてもらってます。

ちょっと気になったところを書いておきます。
$smiley_list部分の修正のところで、修正部分コードをWebブラウザからコピーすると「onclick="smiley('');」となってしまうので「onclick="smiley('(Smile)');」と書き加えていくことになります。出来れば配布ファイルの中にテキストファイルとして同梱してもらえると助かります。

始めはコード内容を確認することなくペーストして、正常な動作をしないのでなぜかなぁ?と原因を追及したところ分かった次第でして。

よろしくお願いします。

追記:
あ、コメントページを開いてソースからコピーすれば良かったのですね。
今ごろになって気付いたのでした。すいません。

From : Pafuxu @ 2007-06-03 06:09:10 編集

Re: P_BLOG での JavaScript 関連の問題を改善

Pafuxu さん、ご指摘ありがとうございます。

スマイリーに変換されてしまっていることに気がついていませんでした。 (Foot in mouth)

ご指摘を受けて、該当部分をテキストファイルとして同梱しました。(パッチファイルにすればよいのかもしれませんが、個人的に fnc_base.inc.php にいろいろ手を入れてしまっているので…)

From : Hiro @ 2007-06-04 01:12:05 編集

Re: P_BLOG での JavaScript 関連の問題を改善

すみません。以下の置き換えなのですが、$smiley_list の部分とはどこを指しているのか、少し詳しく教えていただけないでしょうか?
---------------------------------------------------
>function smiley_button() という関数の $smiley_list の部分を、解凍したファイルに含まれる function_smiley.txt の内容と置き換えることをお勧めします。

From : bird @ 2007-06-17 16:45:53 編集

Re: P_BLOG での JavaScript 関連の問題を改善

bird さん、ごめんなさい。

function_smiley.txt が間違っていました。拙速はいけませんね。

改めてファイルを差し替え、ダウンロード先の記述も修正しましたので、参考にしていただけると助かります。わからないことがあれば、遠慮なくご質問ください。

From : Hiro @ 2007-06-19 00:10:10 編集

Re: P_BLOG での JavaScript 関連の問題を改善

ありがとうございます。

テストしたところ、スマイリー機能等動いております。

1点気づいたのですが、ログ(トピック)を投稿するときの
タグボタンが効かなくなってしまったようです。
([p][strong][ul]等のタグを入れるボタンです)

From : bird @ 2007-07-08 04:00:24 編集

Re: P_BLOG での JavaScript 関連の問題を改善

bird さん、ご指摘ありがとうございました。

タグの入力ボタンが効かないバグを修正したものを、v 1.0.3 として公開しました。既に 1.0.2 を導入済みの場合、scripts.js ファイルだけ差し替えれば OK です。

実はまだ、ログ投稿・編集画面でスマイリーが使えない問題がまだ残っているのですが、こちらはさくっと直せないので、どうやって修正するか、少し時間をください。

From : Hiro @ 2007-07-09 00:56:10 編集

Re: P_BLOG での JavaScript 関連の問題を改善

早速の修正、ありがとうございます。
試していきたいと思います。

From : bird @ 2007-07-10 19:09:59 編集

Re: P_BLOG での JavaScript 関連の問題を改善

順調に使わせていただいております。ありがとうございます。

最近、WindowsのIE7にアップしましたが、以下の症状があります。
何とか使用はできておりますが、お時間ありましたら見ていただけないでしょうか。

記事ログの作成時、resourcesへ画像をアップロードしますが、
・参照ボタンで参照時、画像が下へプレビュー表示されない。
・imgボタンでのタグのwidth,heightが正しく入らない。(以下のように16になる)
  <img src="xxxxxx" width="16" height="16" alt="" />

From : bird @ 2008-04-04 23:05:31 編集

Re: P_BLOG での JavaScript 関連の問題を改善

IE7 ですぐテストできる環境がない以上に、そもそも取れる時間がないので、なかなか対応できそうにないですが、次回更新時には対応できたらと思います。ご報告ありがとうございます。

From : Hiro @ 2008-04-13 21:05:35 編集

Re: P_BLOG での JavaScript 関連の問題を改善

お忙しい中、ありがとうございます。
よろしくお願いいたします。

From : bird @ 2008-04-16 23:57:08 編集

Post Your Comment



(Smile) (Wink) (Laugh) (Foot in mouth) (Frown) (Gasp) (Cool) (Tongue)

*は入力必須です。E-Mailは公開されません。