IEにてvicunaの個別エントリーでスクリプトエラーが起きるのを防ぐ

4 分で読めます。投稿から 7年。最終更新から 7年経過。
この記事の作成に約 57 分かかりました。

WPのvicuna2.03のテーマはIEで開くと個別エントリーで二種類のエラー表示が出ます。実際はさほどのエラーじゃないので実用で問題は起きないのですが、IEだと8でもで目障りな表示が出ますから気になる人がいると思います。んで、IEでスクリプトエラーの表示が出ないようにします。

エラーはどちらもウインドウの左下に「ページでエラーが発生しました」と出ます。
このエラーは二種類あって、ひとつは「メッセージ: オブジェクトを指定してください。」というのでもうひとつは「エラー‘null’ は Null またはオブジェクトではありません。」というのです。

メッセージ: オブジェクトを指定してください。

*管理者としてログイン状態だとエラーは出ません

これはコメントフォームがCookieを参照しているのに、そのCookieのスプリクトがその後(footer)に読み込まれるようになっているので起きます。つまり、順序の問題です。なので、footerで読み込んでいるcookie.jsをヘッダーで読み込むようにしたらOKです。単純にコピーしてテーマ編集からヘッダーに書きこむだけです。条件分岐で個別記事だけ読み込むようにしたら多少スマートだと思います。が、hederとfooterで同じjsを二重に読み込みむので気になる人は最期までよんで下さい。

「エラー‘null’ は Null またはオブジェクトではありません。」

これは古い記事のコメントは受け付けないようにしていると出ます。これもフッターのcookie.js絡みです。上の例とは逆にの理由で起きます。つまり、cookie.jsがコメントフォームを参照しようとするのにコメント機能が閉じられているからエラーが出るわけです。なので、古いコメントを閉じないようにしたらでなくなります。簡単です。

どうしても古いコメントを閉じたい場合は、ftpでテーマファイルの中にあるsrc/classes.phpの中身を書き換えるとでなくなります。フッターにcookie.jsを読み込む記述があるのでそこを、条件分岐で個別記事のコメント機能が有効の時だけ有効にするようにしたらいいです。
が、どうせならフッターじゃなくヘッダーに読み込ませて最初のエラーも一緒に解決したいですよね。

エラー二つとバイバイする方法

二つの問題を解決するのに一番スマートな方法は、個別記事のコメントが有効な場合のみにcookie.jsをヘッダーで読み込むように改造することです。
vicunaのsrc/classes.phpを編集します。
理屈としてはcookie.jsを読み込む部分を条件分岐comments_open()で囲んでコメント機能が有効な場合のみに有効になるようにして、さらにfooterじゃなくてheaderで読み込むように値を削除します。

wp-content/themes/wpVicuna203/wp.vicuna/src/classes.php の1506行から1510行までをしたのコードにそのまま書き換えてください。コピペするだけで大丈夫です。一応、バックアップを取って編集してください。


if (is_singular()) {
wp_enqueue_script('comment-reply');
wp_enqueue_script('vicuna-coookie', get_bloginfo('template_url')
. '/js/cookie.js', array(), false, true);
}

この5行を下のに差し替える


if (is_singular()){
if (comments_open()) {
wp_enqueue_script('comment-reply');
wp_enqueue_script('vicuna-coookie', get_bloginfo('template_url')
. '/js/cookie.js', array());
}
}

これで、vicunaのテーマでスクリプトエラーがでる現象を回避できます。簡単なので気になっていた人はお試しアレ。

スポンサーリンク
レクタングル大