ブログ   うい・らぶ・だいびんぐ   Cube 別館   flag_uk 英語サイト   ポータル
twitter Twitter でログイン
ホーム   最新ニュース   フォーラム   ダウンロード   写真集   リンク集   お問い合わせ RSS

メイン
   XOOPS Google Maps, Google Feeds
  【バグ】 Google Ajax Maps にて JavaScriptエラー。xpWiki と共に使用すると発生する不具合あり。

 

 ボトム   前のトピック   次のトピック
  •  スレッドの評価
      このスレッドを評価する
      すばらしい
      いい!
      ぼちぼち
      だめ
      ひどい
投稿者 スレッド
  •  souhalt
      souhalt
【バグ】 Google Ajax Maps にて JavaScriptエラー。xpWiki と共に使用すると発生する不具合あり。
#1
半人前
登録日: 2007-8-16
居住地
投稿: 31
Google Ajax Maps に xpWiki と共に使用すると発生する不具合あり

[現象1.]
Google Ajax Maps 0.20 を xpWiki 3.13 と共に使用すると、次の様な現象が発生します。

モジュール表示から [地図の表示] (XOOPS_URL/modules/gamaps/location.php) 、
または [GeoRSS の表示] (XOOPS_URL/modules/gamaps/georss.php) を表示させると、
IE6 左下に「エラー:';'がありません。」というブラウザエラーが発生します。
また、これにより JavaScript の実行が中断するので、地図の表示が正常に行われません。

[現象2.]
Google Ajax Maps 0.20 を使用すると、次の様な現象が発生します。

管理メニューの「緯度・経度を取得する」(XOOPS_URL/modules/gamaps/admin/location.php) 、
または [地図の検索] (XOOPS_URL/modules/gamaps/) を表示させ、
住所のフォームに無効な文字列 (e.g. "Tokyo, Japan") を入力する (または入力されている) と、
IE6 左下に「エラー:'xml.documentElement'は Null またはオブジェクトではありません。」
というブラウザエラーが発生します。

[原因1.]
ソース表示させたところ、次のことが分かりました。

HTML コードに埋め込まれた JavaScript コードの中で、gamaps_location_marker_html という変数への代入が、
ダブルクォートのネストにより文法エラーとなります。

gamaps_location_marker_html = "<b>Exsample</b><br/><a href='http://www.tokyo-airport-bldg.co.jp/fl/english/' target='_blank' class="ext">Tokyo Hanada Airport</a>";

この中で class="ext" という属性を与えているものを探したところ、Google Ajax Maps ではなく、xpWiki のファイルでした。
フィルタにより、後から追加されている様です。

XOOPS_TRUST_PATH/class/hyp_common/hyp_get_engine.php:line 164
// 外部リンクの場合 class="ext" を付加
$body = preg_replace("/(<a[^>]+?href=(?:\"|')?(?!https?:\/\/".$_SERVER["HTTP_HOST"].")http[^>]+)>/iS","$1 class=\"ext\">",$body);

"ext" の文字列を他に変更後、ブラウザの表示を更新し、ソース表示させると変更が反映されたので、これが class="ext" の元だと分かりました。

さらに、hyp_get_engine.php を使用しているモジュールが、他にあることも分かりました (nao-pon さんのものです) 。

Yomi-Search 0.87:
XOOPS_URL/mudules/yomi/include/hyp_common/hyp_get_engine.php:line 164
XP-Weather 1.3a(J2.3):
XOOPS_URL/mudules/XP-Weather/include/hyp_common/hyp_get_engine.php:line 164
PukiWikiMod 1.6.5.2:
XOOPS_URL/mudules/pukiwiki/include/hyp_common/hyp_get_engine.php:line 164

HTML コードと JavaScript コードが分離されていないところへ、予想外のフィルタがかけられて、干渉した様ですね。
他のモジュールでも同様の現象が発生する可能性は充分あると思います。
モジュール作者の方はチェックしておいた方がよいかもしれません。

[対策1.(案)]
本来は Google Ajax Maps と、xpWiki 等の、どちらを変更すべきかという議論がなされるべきだと思いますが、
ここでは独断で Google Ajax Maps を変更することによる対策を考えます。

templates/gamaps_js.html: line 15
<<<AFTER
gamaps_location_marker_html = '<{$ga_loc_marker_html}>';
// quoted by "'", not "\""
AFTER;
<<<BEFORE
gamaps_location_marker_html = "<{$ga_loc_marker_html}>";
BEFORE;

location.php: line 34
georss.php: line 34
<<<AFTER
$xoopsTpl->assign('ga_loc_marker_html', gamaps_get_config_text('loc_marker_html') );
// no config from "\"" to "'"
AFTER;
<<<BEFORE
$xoopsTpl->assign('ga_loc_marker_html', gamaps_get_config_text('loc_marker_html', 'textarea') );
BEFORE;

xoops_version.php: line 181
<<<AFTER
$modversion['config'][17]['default'] = '<strong>Example</strong><br /><a href="http://www.tokyo-airport-bldg.co.jp/fl/english/" target="_blank">Tokyo Haneda Airport</a>';
// exchanged "\"" and "'", <b> -> <strong>, Exsample -> Example, <br/> -> <br /> (space added), Hanada -> Haneda
AFTER;
<<<BEFORE
$modversion['config'][17]['default'] = "<b>Exsample</b><br/><a href='http://www.tokyo-airport-bldg.co.jp/fl/english/' target='_blank'>Tokyo Hanada Airport</a>";
BEFORE;

以上 4 ファイルを修正し、Google Ajax Maps をアンインストール後、再インストールしたところ、上記 [現象1.] は解消しました。

[対策2.(案)]
xml.documentElement の判定を追加する対策を考えます。

include/gamaps.js: line 633
<<<AFTER
// fixed browser errors by invalid inputs (checked with IE6)
if ( xml.documentElement != null ) {
candidate = xml.documentElement.getElementsByTagName("candidate");
if ( candidate.length > 0 ) {
gamaps_geocoder_tokyoUnivResponse( xml );
return;
}
}
alert( gamaps_lang_no_match_place + "\n" + addr );
AFTER;
<<<BEFORE
candidate = xml.documentElement.getElementsByTagName("candidate");
if ( candidate.length == 0 ) {
alert( gamaps_lang_no_match_place + "\n" + addr );
} else {
gamaps_geocoder_tokyoUnivResponse( xml );
}
BEFORE;

以上 1 ファイルを修正し、ブラウザの表示を更新したところ、上記 [現象2.] は解消しました。
住所のフォームに無効な文字列 (e.g. "Tokyo, Japan") を入力する (または入力されている) と、
「該当する場所がない」というポップアップが表示される様になりました。

[References]
Google Ajax Maps 0.20
はっぴぃ・りなっくす - WFダウンロード
http://linux.ohwada.jp/modules/wfdownloads/viewcat.php?cid=1

xpWiki 3.13
ダウンロード - XOOPSマニア
http://xoops.hypweb.net/modules/mydownloads/singlefile.php?cid=3&lid=22

[xoops環境 - local/Windows]
デバッグモード: 「PHPデバグ」に設定
XOOPS_ROOT_PATH = D:/homepage
XOOPS_URL = http://localhost
XOOPS Cube Lagacy 2.1.1
mysql 4.0.27
php 5.2.0
apache 2.0.59
Windows XP HE SP2 / IE6
投稿日時: 2007-8-17 18:41
投稿からPDFを作成 印刷
トップ
  •  nao-pon
      nao-pon
Re: Google Ajax Maps に xpWiki と共に使用すると発生する不具合あり
#2
新米
登録日: 2005-10-22
居住地
投稿: 8
souhalt さん、こんにちは。

これは、xpWiki側(正しくは HypGetQueryWord クラス)のバグですね。

ご指摘の通り、JavaScript 内にもフィルターがかかってしまっているのが原因です。

問題の
$body = preg_replace("/(<a[^>]+?href=(?:\"|')?(?!https?:\/\/".$_SERVER["HTTP_HOST"].")http[^>]+)>/iS","$1 class=\"ext\">",$body);


$body = preg_replace_callback(
            '/(<script.*?<\/script>)|(<a[^>]+?href=(?:"|\')?(?!https?:\/\/'.$_SERVER['HTTP_HOST'].')http[^>]+)>/isS' ,
            create_function('$arr', 'return $arr[1] ? $arr[1] : "$arr[2] class=\"ext\">";') ,
            $body
        );

に修正してみてください。
投稿日時: 2007-8-18 9:44
投稿からPDFを作成 印刷
トップ
  •  souhalt
      souhalt
Re^2: Google Ajax Maps に xpWiki と共に使用すると発生する不具合あり
#3
半人前
登録日: 2007-8-16
居住地
投稿: 31
nao-pon さんの修正の効果を確認しました。
xpWiki - XOOPS_TRUST_PATH/class/hyp_common/hyp_get_engine.php に指示通りの修正を適用後、
ブラウザの表示を更新し、ソース表示させると、問題のポイントに class="ext" が追加されなくなりました (効果あり) 。

Google Ajax Maps - XOOPS_URL/modules/gamaps/location.php:
gamaps_location_marker_html = "<b>Exsample</b><br/><a href='http://www.tokyo-airport-bldg.co.jp/fl/english/' target='_blank' class="ext">Tokyo Hanada Airport</a>";

↓Google Ajax Maps に、前出の [対策1.(案)] を適用

gamaps_location_marker_html = '<strong>Example</strong><br /><a href="http://www.tokyo-airport-bldg.co.jp/fl/english/" target="_blank" class="ext">Tokyo Haneda Airport</a>';

↓xpWiki に、nao-pon さんの修正を適用

gamaps_location_marker_html = '<strong>Example</strong><br /><a href="http://www.tokyo-airport-bldg.co.jp/fl/english/" target="_blank">Tokyo Haneda Airport</a>';

これにより、[対策1.(案)] を適用しない場合でもダブルクォートがネストしなくなるので、ブラウザエラーは発生しなくなると思います。
ただ、属性値のクォートにシングルクォートを使うのは、やはり避けた方が無難かな、という印象は残ります。

一方、修正を適用後でも、<script> 要素の外にある HTML コードに含まれる外部リンクには、しっかり class="ext" が追加されています。
これは、やはり意図されたことなのでしょうね?

***

また、前出の [現象2.]、[対策2.(案)] は、Google Ajax Maps 単独の話で、xpWiki とは関係ありません。
スレッドを分けた方がよかったでしょうか。
投稿日時: 2007-8-18 22:54
投稿からPDFを作成 印刷
トップ
  •  ken
      ken
Re: 【バグ】 Google Ajax Maps にて JavaScriptエラー。xpWiki と共に使用すると発生する不具合あり。
#4
管理人
登録日: 2003-9-6
居住地 横浜
投稿: 2519
引用:

[現象2.]
管理メニューの「緯度・経度を取得する」(XOOPS_URL/modules/gamaps/admin/location.php) 、
または [地図の検索] (XOOPS_URL/modules/gamaps/) を表示させ、
住所のフォームに無効な文字列 (e.g. "Tokyo, Japan") を入力する (または入力されている) と、
IE6 左下に「エラー:'xml.documentElement'は Null またはオブジェクトではありません。」
というブラウザエラーが発生します。


バグ報告ありがとうございます。

ご指摘の現象が確認できたので、ご提案の変更を採用しました。

CVSを変更しました
http://xoops.cvs.sourceforge.net/xoops/modules/gasearch/modules/gamaps/
- include/gamaps.js
投稿日時: 2007-8-19 14:37
投稿からPDFを作成 印刷
トップ
  •  souhalt
      souhalt
Re^4: 【バグ】 Google Ajax Maps にて JavaScriptエラー。xpWiki と共に使用すると発生する不具合あり。
#5
半人前
登録日: 2007-8-16
居住地
投稿: 31
ken さん、レスありがとうございます。
[現象2.] 対策の件、次期改版内容に含めていただけると幸いです。

さて、上記の件とは別の現象が発生しています。
xpWiki とは無関係なので、別スレにしました。
本文は、こちら↓を参照願います。

Google Ajax Maps 「[日本] 逆ジオコードを使用する」において JavaScript エラー発生
投稿日時: 2007-8-20 16:38
投稿からPDFを作成 印刷
トップ
 トップ   前のトピック   次のトピック

 


 新規スレッドを作成することはできません。
 スレッド一覧を閲覧することができます。
 投稿に対する返信はできません。
 自分の投稿を編集できません。
 自分の投稿を削除できません。
 新規の投票を追加できません。
 評価できません。
 投稿にファイル添付はできません。
 投稿には承認が必要です。
スポンサー

寄付
配布しているソフトが気に入ったら、寄付をお願いします。
寄付

PageRank のページ毎の表示
http://linux.ohwada.jp/ modules/newbb/viewtopic.php?
PageRank 0 PageRank

メインメニュー

マニュアル

ログイン