トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

BugTrack-plugin/136

ページの作成や編集にはユーザ登録が必要です。

IFrameプラグイン(Rev.3)

  • 投稿者: ZON
  • カテゴリ: 新規
  • 優先度: 普通
  • 状態: 提案
  • 日時: 2004年09月12日 11時42分42秒

 内容

初期版とRev.2の使用停止のお願い ※注意※

これまではFSWiki本体への影響だけを考えてプラグインを書いていました。が、そうでは無くて「呼び出す『被参照URL』が閲覧側に危険なケースを配慮するべき、等」ということを考えると、frameやiframe、それからobjectタグのどれもが「外から持ってくる」性質なので、特定の管理者・編集者以外が使う可能性のあるプラグインとしては危険性が高いと判断しました。(※僕自身は閉じた環境や使用が限定された環境で使ってましたので、すみません、安易に構えておりました)

Rev.3 以降は使い方を制限した新しい仕様で書き直してありますので、これまでのiframeの使用の停止をお願いいたします。制限されているとは言っても、通常このプラグインを使用しなければならないケースでは十分だとおもいます。

  更新内容

くりかえし……※Rev.2 は公開停止しました ※初期版もセキュリティに配慮していませんので同様です。使用を停止されることをお願いします。

iframe_rev3.zip(623)

Rev.3について
プラグイン内部であらかじめ登録したURI値を番号でセレクトするように仕様を変更しました。また、最近の投稿されているプラグインを参考に、大幅に書き直しています

  • 設置……書庫内の IFrame-org.pm(オリジナル)を書き直し、IFrame.pmという名前で保存してから使用してください。
  • 追加……Name値を無効にしたいケースを考えて、Name値無効のスクリプト行を含めました。コメントアウトを交換することでName値が無視されます。
  • ToDo……現状ではURIのリストはプラグイン内部に持つ仕様です。別ファイルにすることも考えましたが不安だったのでファイルは一つです。
Rev.2について (公開停止)
基本的な所は初期版と変わりません。属性を一つ増やし、既定値を一つ定めました
  • 追加……Name値を属性に加えるようにしました。これによってターゲット指定によるフレーム内参照ファイルの変更が可能になります。『説明-3』を御覧下さい
  • 既定値……「CSSでボーダーライン消してもフレームボーダー値が優先されて境界線が消えない」というIEの仕様に対応するためにプラグイン内部で frameborder値を 0 に規定。
  • 書庫形式……Unix系Tar.gzからzip書庫に変更しました。ディレクトリパーミッション755、ファイルパーミッション644になっていると思いますが、解凍時に必ず確認してください
初版 (公開停止)
iframeタグを生成するだけのプラグインとして作成

 説明-1 ■このプラグインの目的

すでに稼働中で、できればそのまま使いたいCGIとか、そのまま埋め込みたいページがあって作ってみました。また、サイト内のコンテンツをFSWikiで全て表示させたいような用途にも使えます。

基本的に iframeタグ を出力するだけの単純なプラグインなので本体に影響は少ないと思いますが、多重に参照したりしないように気をつける必要はあります。

※僕の方の実績としては、使い慣れた日記CGIの表示とか、フロントページにこれまで使っていたカウンターを埋め込んだHTMLを埋め込むとか、多機能な掲示板を組み込む といった用途に使用しています。

※あるいは「FSWikiそのものを拡張しなくても既にあるものを使う」というスタンスに向いているかと思います。

 説明-2 ■設置と使用方法の説明(2006-2/6 更新)

※ 以下はヘルプと同じ文章です。

HTMLタグiframeを出力するパラグラフプラグインです(Rev.3)

インラインフレームエリア内部へURL値で与えられるファイル(html等)を表示します

※Rev.3 から「プラグイン設置者の意図しない使用」を防止するためにあらかじめ登録したURL値 だけが有効なように仕様を変更しました

※旧来の iframeプラグイン を御利用の皆様は必ず交換されますよう、お願いいたします。

iframeタグの挙動について(補足)

これに関する有用な情報源 『height: n%;の正しい仕様』

http://www.mozilla.gr.jp/standards/webtips/webtips0032.html

[要約]HTML4.01 Strictの場合、親要素の「高さ」が子要素の「高さ100%」になる。

……%をつけて指定し、意図したサイズに表示されない場合は iframeタグにとっての親要素である div、body、htmlの幅や高さに制限がないか調べて下さい。

( ./theme以下のCSSを調べてください)

※これはiframeタグの挙動についてですのでプラグインでは対応できません。

なお、FSWikiは標準でHTML4.01 Transitional(URL無し)ですから、ブラウザによって解釈に差が出ます。

「表示される内容に対して100%の高さにしたい」という問題も根は同じです

プラグインの使い方

■設置

まず解凍して得られるファイル IFrame-org.pm を、文字コードEUC 改行LFの扱えるエディタで開き、与えたいURI値を記述します。

※次の部分です

my @URILIST = ("dummy.html" <--この部分が 0番目になります
           ,"dummy.html"    <--この部分が 1番目になります
           ,"dummy.html"    ……以下続きます。増やしても減らしても構いません
           ,"dummy.html"
           ,"dummy.html"
           ,"dummy.html"
           ,"dummy.html");

また、Name値を無効にしたい場合は次の部分をコメントを使って変更してください。

# 出力用整形
my $iframevalue = "<iframe frameborder=0 height=$hvalue width=$wvalue scrolling=$svalue src=$url name=$name> $url </iframe>\n" ;
# Name値を封印したい場合は上をコメントアウトして以下を有効にしてください
# my $iframevalue = "<iframe frameborder=0 height=$hvalue width=$wvalue scrolling=$svalue src=$url> $url </iframe> \n" ;

 ↓  ↓  ↓  ↓変更

# 出力用整形
# my $iframevalue = "<iframe frameborder=0 height=$hvalue width=$wvalue scrolling=$svalue src=$url name=$name> $url </iframe>\n" ;
# Name値を封印したい場合は上をコメントアウトして以下を有効にしてください
my $iframevalue = "<iframe frameborder=0 height=$hvalue width=$wvalue scrolling=$svalue src=$url> $url </iframe> \n" ;

編集が済みましたら、IFrame.pm という名前で保存します(大文字の部分に注意!)

IFrame-org.pm はプラグインとしては使用しませんので別所に保管してください。

最後に iframe ディレクトリごと所定の位置にアップロードして、パーミッションを確認すれば完了です。

標準では次のようになると思います。

plugin ディレクトリ
   |
   +--iframe ディレクトリ (755)
        +-- Install.pm ファイル (644)
        +-- IFrame.pm ファイル (644)

■属性の与え方(全て与える必須タイプのプラグインです)

高さ、幅(px か %の単位を付けて)、スクロールバー(yes、no、auto)、url番号値(0〜の数値のみ)、name値

(すべてカンマで区切ります)

{{iframe 高さ,幅,スクロール,URL番号値,name値}}
例1
{{iframe 80%,90%,no,1,frame01}}
例2
{{iframe 800px,600px,auto,2,objectframe}}

※パーセンテージで与える場合は(補足)にありますように親要素の継承に注意

 見た目の変更について

例えばこんなスタイル設定をするとボーダーなどが消えます。

※このスタイルの意味は

  • 背景は透明
  • 位置は引き継ぐ
  • 上下のマージンは無し、左右は(プラグインであたえられるので)オート
  • ボーダーは線種「無し」、幅「無し」、色「透明」
  • 余白は「全て無し」
iframe {
 background-color: transparent ;
 position : relative;
 margin : 0px  auto  0px  auto ;
 border :none 0px transparent;
 padding : 0px  0px  0px  0px ;
}

※ブラウザによって表示はかなり違うようです

※ マージン等の見た目については ./theme以下CSSでの調整をお薦めします

※あるいはスタイル管理画面でボーダーを消すとか……既定値では frameborder=0だけ組み込みで設定されています

被参照html(またはそれら)の注意

この IFRAME プラグインは、iframeタグ を生成するだけのものです。

したがって、まず iframeタグ の性質や各ブラウザの見え方について知っておかなくてはなりません。よくある問題は背景余白や背景色の問題でしょう。これらは iframeタグ 側からは操作できません。

参照される相手文書(Html や CGI や画像、その他)のヘッダー部分や文書宣言をよく確認しなくてはなりません。そして、それだけのことをしても、例えばインターネットエクスプローラーではバージョンなどで完全にボーダーが消えなかったりというのはあります。「ブラウザによって見え方がかなり違う」というのはこのあたりです。

※文書宣言というのは、インターネットエクスプローラーでたびたび問題になる「互換モード」とかそうした事に関わります。FSWikiがCSSによってスタイルを実現しているので「このページを互換モードでインターネットエクスプローラーに認識させたいか否か?」はサイト管理者の判断で行うべきです。(追記 * そしてサイト全体の文書宣言は統一するべきであり、そのためにはテンプレートをいじる必要があります。テンプレート(テーマじゃないよ)についてはここでは触れません)

被参照htmlの例をひとつ

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xml:lang="ja" lang="ja" style="border-style:none;">
<head>
<base href="*ここに親ページのURLを* *リンク対策です*" target="_parent">
  <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
  <meta http-equiv="Content-Style-Type" content="text/css">
 <title>ページのタイトル</title>
</head>
<body scroll="no" >
……以下は内容

上の例が期待するように認識された場合、 iframe タグのあるページと背景色が同じになり、ボーダーも表示されません。繰り返しますが、それはブラウザがどう解釈するかに依存します。

 説明-3 ■ターゲットフレームとしての使いかたについて(2006-2/2 追加)

ここでは あき氏のBugTrack-plugin/160 で紹介されている『装飾用HTMLタグプラグイン』の中の a プラグインを使った例を紹介します。

>例
{{a カウンターを表示|counter.html,target=frame01}}<->{{a バナーを表示|image/banner/banner.gif,target=frame01}}

{{iframe 60px,200px,no,0,frame01}}

上記の例では 小さな枠の中でカウンターの埋め込まれたページとバナー画像の表示をリンクのクリックで交換できるようになります。 同氏の div_begin 〜 div_end プラグインを使えば、さらにセンタリングや段組みレイアウトも可能です。

従来通り Name値を与えたくない場合は、プラグインを編集する際にコメント部分を参考にして無効化を行ってください。与える方はName値があっても問題ありません。

(雑感 ……多少難解にはなりますが、ちょっと凝りたい時に良いです。なによりブラウザがどう表示するか確認しながらデザインできるので助かります。もちろんリスクは自分持ちになりますが)

※その際の余白背景については、設定やブラウザの規定解釈に影響をうけるようです。

  配布

書き忘れていました、ご自由にお使いください。GPLということでいいのかな?

 コメント

  • 複雑な段組のデータシートとかをページに組み込むのに使わせていただいています。非常に重宝しております。作者のZONさんに大感謝です。 - D-Dragon (2004年10月11日 17時36分37秒)
  • 誤解して使用されるユーザ様がいらっしゃると怖いので、敢えてコメントさせて頂きます。ifnameタグそのものはとても便利なタグですが、このタグを一般ユーザが自由に埋め込み可能な状態にしておくことは非常に危険です。外部には編集権限を与えない状態で使用するか、又はクローズドな環境でのみの使用に限定してください。理由に関してはこちらをご参照ください。改良案としては、例えば、スキーム「http://」を含まないURL指定の時のみ有効とする。などのように改良を加えると、いくらかは安全です。ですが完全ではないです。 - あき (2006年02月02日 13時25分47秒)
  • 具体的提案ありがとうございます。

今まで特に反応が無いので需要も無いんだと思っておりまして、自分の必要な機能だけ考えて書いておりました。それで今回のご指摘を受けて、今の自分の用途を見てみると……

    • https://で始まる別セグメント内のphp
    • 同一サイト内のhttp://で始まらないhtmlとcgi
    • 同一LANセグメント内の別のApacheサーバー上のFSWiki

……の、三通りをこのプラグインでまかなっており、ちょっと途方に暮れました。仕様をどうまとめようかと考えたんですが、パターンマッチで判定するには荷が重そうです。

そこで発想を変えまして「あらかじめ設置者がプラグイン内にURI値を登録しておいて、使うときには現在URI値になっているところに番号を書く」という方向で仕様変更したらどうだろうかと考えてみました。つまり、プラグイン内に書かれていないURI値は使えないという考えです。もちろん、iframeタグのリスクに付いてもヘルプとこのページで目に付くよう書くとして。

しばし時間がかかりそうです。登録ファイルを一時消したいのですが、ここでお願いしてよいものですか? - ZON (2006年02月02日 22時20分59秒)

  • そうですね。有効なURLを管理者のみが設定できるような仕組みにしておくなら問題ないです。ファイルを削除しておきました。全て削除で良かったですか?一応ローカルPCには待避してますので復帰の必要があれば言ってください。 - あき (2006年02月02日 22時56分33秒)
  • 削除ありがとうございます。では、この仕様で作りなおし作業にはいります(何しろ自分にとって需要が高いもので) - ZON (2006年02月02日 23時03分20秒)
  • Rev.3を公開しました。このページの使い方ももうちょい整頓しますね - ZON (2006年02月06日 16時47分48秒)
お名前: コメント:
iframe_rev3.zip

最終更新時間:2006年02月13日 09時36分57秒