Liner Note

情報(ユーザー中心デザイン・ユーザビリティ)と技術(ウェブプログラミング・ウェブサービス)についてのメモ書き

Google マップがAPIを使わなくてもHTMLのコピペで貼り付けられるようになったそうなんですが、その埋め込みコードがこんな感じ‥。

HTMLソースコード
<iframe width="425" height="350" frameborder="no" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?f=q&hl=ja&geocode=&q=%E5%85%AD%E6%9C%AC%E6%9C%A8%E3%83%92%E3%83%AB%E3%82%BA&ie=UTF8&ll=35.668872,139.733391&spn=0.008002,0.021071&z=14&om=1&output=embed&s=AARTsJoK7f-qyYsyjBSSd_JVp_x3IpAcVA"></iframe><br/><a href="http://maps.google.com/maps?f=q&hl=ja&geocode=&q=%E5%85%AD%E6%9C%AC%E6%9C%A8%E3%83%92%E3%83%AB%E3%82%BA&ie=UTF8&ll=35.668872,139.733391&spn=0.008002,0.021071&z=14&om=1&source=embed" style="color:#0000FF;text-align:left;font-size:small">拡大地図を表示</a>

XHTML1.1ではiframe要素は廃止されましたし、それでなくとも物理要素まみれです*1 。ということで、これを前回にならって、GreaseMonkey経由でXHTML 1.1に適合するようにしてみたいと思います。

まず、上記のコードをXHTML 1.1に適合させるとこんな感じになります。

HTMLソースコード
<p><object data="http://maps.google.com/maps?f=q&geocode=&q=%E5%85%AD%E6%9C%AC%E6%9C%A8%E3%83%92%E3%83%AB%E3%82%BA&ie=UTF8&ll=35.668872,139.733391&spn=0.008002,0.021071&z=14&om=1&output=embed&s=AARTsJoK7f-qyYsyjBSSd_JVp_x3IpAcVA&hl=ja" width="425" height="350" type="text/html"><a href="http://maps.google.com/maps?f=q&geocode=&q=%E5%85%AD%E6%9C%AC%E6%9C%A8%E3%83%92%E3%83%AB%E3%82%BA&ie=UTF8&ll=35.668872,139.733391&spn=0.008002,0.021071&z=14&om=1&output=embed&s=AARTsJoK7f-qyYsyjBSSd_JVp_x3IpAcVA&hl=ja">拡大地図を表示</a></object></p>

つまり、iframe要素をobject要素で代替するわけです、また画像が表示できない環境では、リンクだけが表示されるはずです。

が、これはあんまり実用的ではなかったりします。なぜなら、IE6の場合、設置サイトと別のドメインのデータをobject要素で読み込むと、表示されなくなる不具合があるようなんですね*2 。百歩譲って、aタグが表示されればいいのですが、それさえも表示されない始末。

ってことで面倒なのですが、この問題を解決するために、phpで自ドメインを経由してGoogle Mapsを読み込むことで回避しておこうと思います。具体的には、object要素の参照先(data属性)をhttp://mysite.jp/abc/embed.php/http://maps.google.com/?...と言う形にします。

そいで、embed.phpは

PHPソースコード
<?php
$url = str_replace("/abc/embed.php/", "", $_SERVER['REQUEST_URI']);
if(ereg("Safari", $_SERVER['HTTP_USER_AGENT'])) {
    header("Location: $url");
} else{
    echo file_get_contents($url);
}
?>

て感じです。途中のコードは参照先を書き換えているところで、ドメイン以下からembed.php/までを指定してください。embed.phpの設置先がhttp://mysite.jp/abc/embed.phpなら置換文字列は/abc/embed.php/となります。できたら、設置サイトと同じドメインの好きな場所においてください。

で、ようやくGreaseMonkeyです。次のGreaseMonkeyスクリプトを、内容を確認の上、インストールします。

ダウンロード
Google Maps 埋め込みコード valid 化スクリプト

そして、変数 domain を embed.php を設置したURLに変えてください(変更しないと上手く表示されません)

以上で、諸々の設定は終わり。

Google Mapsの画面

コードはGoogle Mapsの画面から「このページへのリンク」を踏んで開いたダイアログにある「埋め込み地図のカスタマイズとプレビュー」のリンク先から閲覧できます。

で、以下が実際に貼り付けてみた例です。ここで誰もが「簡単に貼り付けられるための機能なのになんでこんなに面倒くさいのだ」とツッコまれるかと思いますが、その辺はまぁ過渡的措置と言うことで。

ちなみに、私はこれにさらに改造を加えて、こんな感じになるようにして使っています(リキッドレイアウトマップ)

拡大地図を表示

Safariで地図が表示されないようなので、ブラウザがSafariだと思われる場合、Google Mapsの該当ページにリダイレクトするようにしました
暁さんのご指摘の通り、javascriptコード中の&を実体参照にしました。

現在はWordPressスキンの機能に組み込んで使っています

  1. 後で見るように実装上仕方ない面はあるのですが[戻る]
  2. b:id:asiamothさんへ。私もこのサンプルの検証+WWW WATCHと言うサイトで伝え聞いたくらいですから広く不具合とされているわけではないようですが、この環境下ではそうした不具合が出ましたと言うことです。[戻る]
キーワード:

似たもの記事

読者の皆さんの反応サイト内コメントの更新情報(RSSフィード)

読者のコメント

5

ブックマークコメント

0

他サイトの関連記事

0

読者のコメント

  1. お名前

    j.Abe

    投稿日時
    2007年08月22日
    11時ごろ
    Comment No
    #1

    Safari3だと、地図のコントロールやロゴは表示されますが、地図が表示されません。

    xhtmlに準拠させるのにこんなに手間がかかるとは……。

  2. お名前

    leva

    投稿日時
    2007年08月22日
    14時ごろ
    Comment No
    #2

    んー、なんでしょうね。件のphpを通したヤツと通していないヤツのソースを見比べましたが、一目で分かるのはエンコーディングの違いですね、でもエンコードを合わせても変化がないのでこれが原因ではないみたいです。

    つーわけで、よくわかりませんが、Safariの場合は地図ページを直接読み込むように設定しました。これで問題ないはずです。

  3. お名前

    J.Abe

    投稿日時
    2007年08月23日
    0時ごろ
    Comment No
    #3

    早速対策を考えて頂いたのてありがとうございます。しかし

    warning: Cannot modify header information – headers already sent by (output started at /home/vista/www/blog/wp-includes/embed.php:5) in /home/vista/www/blog/wp-includes/embed.php on line 7

    だそうです。Safariというかwebkitではこのような警告を受ける場面がFirefoxより多い感じもしますが。

    Safari Version 3.0.3 (522.12.1) Intel Mac OS X 10.4.10です。

  4. お名前

    leva

    投稿日時
    2007年08月23日
    4時ごろ
    Comment No
    #4

    すいません、これは検証不足でした。
    前者はよく分かりませんでしたが、このエラーは警告されても仕方ないことをしていたので‥。とりあえず、情報を一部出さないことで対処しました。

    情報どもです。

  5. お名前

    デッドリー

    投稿日時
    2008年01月14日
    0時ごろ
    Comment No
    #5

    管理人様はじめまして。

    デッドリーと申します。以後宜しくお願い致します。

    Google MapをXHTML 1.0 Validにしたいと思い、ページを探していたらこのページに辿り着きました。

    大変参考になりました。ありがとうございました。

はてなブックマークでつけられたコメント

他サイトの関連記事

トラックバックはまだ寄せられていません


トラックバックとは
この記事に言及したサイトをこちらに掲載する仕組みをトラックバックと言います。ここでは、このサイトに頂いたトラックバックを一覧表示しています。
トラックバックしてくださる方へ
この記事への言及がない記事など、トラックバック受信方針に沿っていないものは、読者にお見せしても仕方ないこともあり削除させていただいることをご了承ください。
トラックバックを受け取るためのURI

コメント書き込みフォーム

  • メールアドレスはウェブ上で公開したり、連絡以外で使うことはありません
  • コメントを公開したくないが、作者に連絡を取りたい場合は メールで連絡してください
  • 本文中にHTMLコードは使用できません(URLはそのままお書きください)