document.write()の実行タイミングをずらす方法

category-icon

関連エントリー: Google Adsenseの表示タイミングを制御するLink

 このサイトのppBlog's webRingのリストは、BlogPeopleLink からdocument.writeで書き出しています。というかBlogPeopleのスクリプトがそうなっているのですが。で、document.writeが、HTMLソースの最初の方にあると、document.writeによる書き出しが終わるまで、それ以降のページのレンダリング(HTMLの書き出し)はストップした状態となります。document.writeによって呼び出している外部サーバー(ここではBlogPeople)のレスポンスが速ければ、ページ描画で待たされることはありませんが、たまにはレスポンスが遅くて、ページの残りがなかなか表示されないという事態は起こりえます。このdocument.writeは、広告バナーなどでも当たり前のように使われていて、メインコンテンツの内容が知りたいのに、バナー広告がなかなか表示されず、イライラしたという経験もあるかと思います。確か、GoogleのADWordsなどでも使われているのではないでしょうか。

 こういう事態を避けるには、HTMLソースの最後の方で document.write を呼び出すというのがあり、これはこれで有効ですが、そう汎用性のあるやり方ではなく、また、スクリプト(JavaScript)がHTMLの中で、あちこちに散らばるのは美しくないです。

 ここでは、document.writeの内容をとりあえず配列などに一時的に退避させといて(この間にHTMLソースの描画は進んでいきます)、ページ読み込み完了と同時に、そのストックしておいたdocument.write内容を吐き出すという方法について書いておきます。

 まず、普通にdocument.writeを含んだ外部スクリプトを呼び出すやり方。これは、BlogPeopleがこうしましょう、と述べているものです。

<script type="text/javascript"
  src="http://www.blogpeople.net/display/usr/0f0d40535b5b4103.js"
  charset="euc-jp"></script>

これの実際の中身は、次のようになっています。

document.write('<div class=¥'blogpeople-main¥'>');
document.write('登録されたサイト')
     :
     :
document.write('</div>');
document.write('<div class=¥'blogpeople-powered-by¥'>');
document.write('<br /><a href=¥'・・・¥' target=¥'_blank¥'><img src=¥'・・・¥' border=¥'0¥' alt=¥'Powered By BlogPeople¥' /></a>');
document.write('</div>');

ここに使われているdocument.write内容をとりあえず配列に入れておけば良いのですが、それには次のようにします。

(function(){
  var alts = []; // document.writeの内容を入れておく配列を準備 
  d._write = d.write; // オリジナルはコピーしておく
  d.write = function(s){ alts.push(s);} // d.writeを新たに定義
  var src = "http://www.blogpeople.net/display/usr/0f0d40535b5b4103.js";
  var script = d.createElement('script');
  script.setAttribute('type', 'text/javascript');
  script.setAttribute('charset', 'euc-jp');
  script.setAttribute('src', src);
  d.getElementsByTagName('head')[0].appendChild(script);
  addEvent(window, "load", function(){
   o("_webRing").innerHTML = alts.join(""); // 指定した場所に流し込む
   d.write = d._write; // d.writeを元の定義に戻しておく
  });
 }());

 ポイントは、既存のdocument.writeを新たに、

document.write = function(s){ alts.push(s); }

と再定義している点です。ここではaltsという配列に退避させています。こうすることで、document.writeによる書き出しを待つことなく、残りのページレンダリングを進めていくことが出来ます。このスクリプトで、SafariでもIE6でもFirefoxでもきちんと動くことを確認しています。

 小生のブログであるmartin.p2b.jpのwebRingLink と、このサイトにあるwebRingLink とは同じ外部スクリプトを呼び出しているのですが、比較のために、このサイトのwebRingは上記の手法で、martin'sの方は従来の方法で呼び出しています。BlogPeopleのサーバーレスポンスは素早いので、なかなか差が実感できにくいかと思いますが、このサイトのやつは、(サイドバーのHTMLソースはdocument.writeよりも後にもかかわらず)サイドバーが先に表示されて、最後にwebRingのリストが表示されるのに対して、martin'sの方は、HTMLソースの順序通り、webRingリスト→サイドバーという順序で表示されています。

 ちなみに、このサイトのwebRingは、ppBlogの「ページ作成機能」を使って作成しているのですが、具体的に、どのような内容になっているのか、理解の一助のために添付しておきますね。

 まぁ、こんなアプローチもありますよということで

添付ファイル: webRing.txtattachedIcon 

 


— posted by martin at 05:09 pm   commentComment [14]  pingTrackBack [1]

mob.phpアップデート au 1XWINに対応

category-icon

 こんばんは。au使いのユーザーの方から、モブログ投稿が出来ないということで、モブログのデバッグモードファイルを送付していただき、対応出来た様なので、mob.phpの最新版を添付しておきます。ちなみに、今回新たに対応したであろう機種は

  1. A5518SA au CDMA1X機(三洋)
  2. W41H au CDMA1X WIN機(日立)

の2種です。情報を下さったユーザーの方に、この場を借りてお礼申し上げます。

添付ファイル: mob.phpattachedIcon 

 


— posted by martin at 08:23 pm   commentComment [3]  pingTrackBack [1]

タグ機能、モブログ、ローカルプレビュー周り

category-icon

 おはようございます。タグ機能関連で不具合があったのでそれのフィックス版です。あと、モブログに関して、ケータイの機種によっては、タイトルが取得できなかったり、添付ファイルつきの投稿が上手く出来ないなどの症状があり、とりあえず原因が分かった所のfixと、ローカルプレビュー周りの正規表現を少しいじってみました(my_parser関数)。

 ここでひとつ、みなさんにお願いがあるのですが、ケータイからの投稿が上手くいかないという方は、管理画面のモブログの設定のところで「デバッグモードを有効にする」をオンにして投稿すると、デバッグモードとなり、ownerディレクトリに、デバッグ用のテキストファイルが作成されるので、これをinfo@p2b.jpもしくはmartin.info.jp@gmail.com宛てに添付していただければ、可及的な対処が可能になると思います。こればかりは、実際にケータイが出力する文字列を見てみないと何ともしがたい部分なので。。生成されるファイルには、本来ならば、送信元のメールアドレスが記載される部分があるのですが、これは自動的にfoo@example.comに置換するような処置を入れています。お手数ですが、ご協力いただけると助かります。

 例によって、差分ファイルをば(7月17日版から18-19日にかけての修正含む)。

 


— posted by martin at 07:47 am   commentComment [10]  pingTrackBack [1]

現時点でのlib.jsほか動画ファイル関連

category-icon

 Opera9でのAjax関連のスクリプト動作がちょいと怪しいので、一応Opera9でも何とか動くようにlib.jsを修正してみました。以前から、OperaのinnerHTMLの挙動は不審な点があるんですよね。バージョン9になっても、それほど改善はされていないのかなぁ。自分のところにくるOpera使いは3パーセント台で決して多くはないのですが、モダンなブラウザであることに変わりはなく無視するわけにもいきませんので。

 あと、バージョンアップに際して、動画ファイルの扱いを見落としていました。バージョン1.5からは、今後のポッドキャストや音楽ファイルの配布なんかを見据えて、これまでの動画ファイルは画像ファイルと切り離して、画像ファイルと、その他のメディアファイルという扱いにしています。それに伴い動画ファイルのログ形式もちょっと変えたのでした。これは、スクリプトの方で、1.4系もカバーするようにします。ついでといっては何ですが、メディア関連の画像が抜けていたり、ほかに、メディア関連の出力タグに、これまでスタイルシートのクラス名を指定していなかったので、これもクラス名を設けました(class="media-part")ので、添付しておきますね。

 現状では、画像データベースは備えていますが、メディアデータベースはまだです。まぁ、これは画像データベースの流用で、ある程度簡単に実装できると思いますが、動画・音声系は、もうちょっと機が熟してからでよいかなと思っています。バージョン1.5.5ぐらいで? 個人的には、ポッドキャストを勉強して、それをある程度扱えるようになったらと思っています。外枠を捉えるのはそう難しいものではないでしょう。実際のコンテンツ作成は別として。

 というわけで、1.4系の動画ファイルを考慮した、そして、今後のメディア関連の扱いもある程度意識したutils.phpとutils_admin.phpを添付しておきます。その他、メディアアイコンと最新版のlib.jsを添付しておきます。

添付ファイル: 1153060946_DIFF060717.zipattachedIcon 

 


— posted by martin at 12:32 am   commentComment [15]  pingTrackBack [2]

ppBlog1.4系〜1.5RC1系からの移行について

category-icon

 おはようございます。ppBlog1.5.1は7/16版が最新です。7/14との差分ファイルを添付しておきます。

 さて、1.4系〜1.5RC1系からの移行手順を書いておきます。記事ログ自体の記録フォーマットは変わりません。ログ系のフォーマットでは、コメントログの保存形式が変わっていますので、これはコメント変換プログラムLink [cm15up.php]を利用する必要があります。配布中の最新版のppBlogをダウンロードして解凍後、FFFTPGなどのFTPソフトを使って、アップロードするわけですが、この際に新たにディレクトリを作成して新規インストールするか、それとも現行の1.4バージョンを上書きインストールするかの2通りあります。PHPのプログラムにある程度精通していて、かつppBlogにも慣れている(:))方なら、上書きインストールでも良いと思いますが、バックアップや不測の事態のことも考えると、新規インストールが無難かもしれません。以下では、新規インストールでの手順を書いておきますが、上書きインストールでも基本的にやることは同じです。

 無事、新規にインストールが終了したとして…、

  • 現行のブログのログ系ファイル(log, tb, cmt)・設定ファイル(ownerディレクトリの中身)・画像ファイル系(PIX, PIX/s1, PIX/s2, mov)・その他(attached, page)は、ひとまずすべて、お使いのPCにダウンロードしておきましょう。バックアップにもなります。
  • 設定ファイルの移行。まずは、旧版で使っていたownerフォルダの中のini.inc.php以外のファイルを、新規インストールしたownerディレクトリに上書きアップロードします。この際に、アップロードしたファイル群のパーミッションを666か606に変更して下さい。FFFTPでは、複数選択して一気にパーミッションの変更が出来ます。
  • 次にログファイル系の移行をします。お手元のlogフォルダの中身はサーバー上のlogへ、cmtフォルダの中身はcommentsディレクトリへ、tbフォルダはtrackbacksディレクトリへ。これらもログファイルのパーミッションを666か606に変更するのを忘れずに
  • 画像系のアップロード。PIX内のは、そのままアップロードして下さい。s1やs2の中身はそれぞれのディレクトリへ。movフォルダはmediaディレクトリへです。パーミッションはとくにいじらなくて良いと思います。
  • その他のアップロード。attachedフォルダの中身はaffixedディレクトリへ、pageフォルダはpagesディレクトリへ。pagesディレクトリの中のファイルはパーミッションを666か606に変更します
  • 以上が終わったら、コメントログを変換します。上で述べたコメント変換スクリプト(1148270263_cm15up.php)をダウンロードしたらcm15up.phpにリネームして、index.phpと同じ階層にアップロードします。そして、このファイルに、ブラウザ上からアドレス直打ち(http://〜/cm15up.php)でアクセスすると、自動的に変換作業が開始され、1秒以内で終了するはずです。上手くいけば、「コメントログの書き換えに成功しました。」というメッセージが表示されます。このメッセージを見たら、もうcm15up.phpは不要なので削除して下さい。
  • 以上の作業が済めば、この時点でトップページ(index.php)にアクセスすると、とりあえず既存の記事は表示されていると思います。でも、サイドバーの「最近のエントリー」や「コメント」「トラックバック」といった類のボックスには何も表示されていないと思います。これは、それらはキャッシュファイルから読み出しているからです。以下にキャッシュファイルの生成方法を述べます。
  • 各種キャッシュファイルの生成。基本的にキャッシュファイルは、記事を書いたり、コメントやトラックバックがついたりしたら、そのタイミングで自動的に生成されます。なので、記事は新規に何か書いてみても良いですし、記事の編集をするだけでも良いです。コメントは、既存のコメントを修正したり、新たに書いたりすれば、最新のコメント情報のキャッシュが生成されます。トラックバックは、とりあえず自分自身の記事にトラックバックしてみてもよいでしょう(セルフトラックバック)。
  • 最後に、アップロードした画像ファイルのキャッシュを生成します。これは、「管理画面」→「画像管理」とすすんで、ImageManager画面を開きます。ここの冒頭説明リスト文の最後に「このアイコンをクリックすると…」というのがあるので、そこのアイコンをクリックして下さい。画像データベースが新規に作成されます。
  • 以上で、とりあえずは移行作業は終了です。多分。

 大体、こんな感じでよいと思います。アクセスログの移行に関しては、アクセスログの文字コードも違いますし(UTF-8に統一)、考えてないです。悪しからず。なにぶん、1.4系から離れて久しいので、移行手順について何か見落としがあるかもしれません。気付かれた方はフォローお願いします。

 最後になりますが、7/14版からの差分ファイルを添付しておきますね。ご指摘があった分の修正です。mob.phpの調整、moby.phpからの記事削除が出来ない件、cssファイルの修正、atom1.0/rss2.0の出力調整をしています。

添付ファイル: 1152997575_DIFF060716.zipattachedIcon 

 


— posted by martin at 07:38 am   commentComment [19]  pingTrackBack [2]

T: Y: ALL: Online:
Created in 0.0057 sec.
prev
2024.4
next
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30