sonots:iframe.inc.php に引っ越しました。
インラインフレームとはページ内に埋め込むフレームのことです。 ページの中に他のページを表示できます。 CGIやHTMLとして完成している文書を表示するのに用いるかもしれません。
つまりは iframe タグのことですが、XHTML1.1 では iframe は使用できないため object タグで代用していたり、していなかったりします。
インラインフレーム化せずにHTMLを取り込みたい場合は自作プラグイン/htmlinsert.inc.phpを利用します。ただし XHTML Valid にするためにHTML文書の改変は必要になるでしょう*1。こちらではCGI系はさすがに無理です。
最新版は、sonots:iframe.inc.php からダウンロードしてください。(以下のファイルは、古いものです)
拡張子の番号をはずして plugin フォルダに放り込んでください。
リビジョン | 日付 | 備考 |
![]() | 2005/01/25 | iestyleを指定していない場合でもstyleが指定してあればそちらを利用する処理を消してしまっていたので修正 |
![]() | 2005/01/25 | pukiwiki1.4.4対応*2。サイズ指定がうまくいかない不具合を修正。オプション変更。いっそのことスタイルシートクラス名も変更。 |
![]() | 2004/07/09 | modified by sonots |
v1.4 | 2004/07/09 | modified by sonots(XSS脆弱性の為削除) |
![]() | 2004/07/09 | modified by sonots |
![]() | 2004/07/08 | modified by sonots |
![]() | 2004/06/22 | modified by sonots |
![]() | 2004/05/09 | by ino_mori |
#iframe(URL[,オプション])
とりこむURL。許可されているものしかとりこめない。許可するURLは iframe.inc.php 中で設定する。絶対アドレスのみ許可されるように設定してください。
スタイル設定。ここで style="width:500px;height:500px;" のように指定。CSSファイル中の記述よりも優先される。
ところで IE以外(Mozilla, Opera等) では object タグを使用している。その際 height:100% では全く 100% の表示にならない。height:500px あたりが無難?
IE 用のスタイル指定。指定されなくても style の値が使われる。ここで iestyle="width:500px;height:500px;" のように指定。CSSファイル中の記述よりも優先される。
ところでこちらでは諸々の問題で iframe を使用している。width:100% ではスクロールバーが切れたので width:99% あたりが無難?height:100% はこっちではありらしい。
iframe.inc.php を開き、許可する URL を編集します。
正規表現による指定。ホスト許可などに使用。例)
$iframe_accept_regurl = '^http://www.google.co.jp$|^http://pukiwiki.sourceforge.jp';
http://www.google.co.jp を許可。http://pukiwiki.sourceforge.jp 以下のページをすべて許可。 正規表現なので本当は \. にすべきです。
ただの文字列マッチによる指定。常にこちらを使用した方が安全。 日本語を使用する場合はURLエンコードしておくこと。例)
$iframe_accept_url = array( 'http://pukiwiki.sourceforge.jp/index.php?%E8%87%AA%E4%BD%9C%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%2Fiframe.inc.php', );
デフォルトのサイズはスタイルシートを編集することで指定可能です。
.iframe_others { height: 600px; width:100%; margin-left:auto; margin-right:auto; } .iframe_ie { height: 600px; width:100%; margin-left:auto; margin-right:auto; }スクロールバーの設定にはスタイルシートの overflow を、ボーダーも border を使用するといいでしょう。
ぜんぜんプログラミングとかできないんですが
他のプラグインをまねしながら作りました。
用途としてはかつてhtmlで作ったものを
pukiwikiで表示させるのに使うなど
可能性はかなりあるのではないでしょうか?
/* iframe.inc.php */ .object_others { height: 600px; width:100%; margin-left:auto; margin-right:auto; } .object_ie { height: 600px; width:100%; margin-left:auto; margin-right:auto; }
以上で完成です。
#iframe(URL)
相対パスでも絶対パスでも可です。
未熟者なのでご意見とかいただけると幸いです。
IEの場合、コンテンツがheight,widthの値*3よりも小さい場合でも、ダミーのscrollbarが表示されてしまうので注意が必要。IEの場合のみ、$html_transitional = 1;を設定して、<iframe>で表示したほうがいいかも。
なお、MozillaやOperaなどW3C準拠のブラウザでは、コンテンツがheight,widthの値*4よりも小さい場合にはscrollbarは表示されない*5。
設置者の意志とは無関係に、第三者のサイトのコンテンツを自由に取り込めてしまうので、取り込んだコンテンツが悪意のあるものだった場合、セキュリティ上、危険かも。悪用されるおそれがあることを理解した上で設置しましょう。
であれば、凍結されたページのみ機能する。という実装ではいかが?
続・質問箱/46でも相談させていただいたことが、こちらで解決できました。ありがとうございます。もしできるのであれば、heightやwidthの値が#iframe(URL,height,width)のような形で指定できると嬉しいですね。
やるなら#iframe(URL,IE用width,IE用height,width,height)でしょうね。
いろいろご意見ありがとうございます。やはり、サイズ、凍結など検討させてもらいます、僕の手に負えるかどうかも含めて(汗
ちなみに、外部のサーバーを参照するとうまくいかないことがあるみたいです。
セキュリティ的には管理者がとりこめるアドレスを限定できればいいだけですよね?
IE で <object data="http://www.google.co.jp" type="text/html"></object> のように絶対URLで記述する表示されないのですが、どこか IE の設定がおかしいのでしょうか?相対URLだと表示されました。
iframe.inc.php.1 改変させてもらいました。ファイル中で指定したアドレスのみに限定できるようになりました。width,height,iewidth,ieheightオプションでサイズを指定できるようになりました。iewidth,ieheightを指定しない場合、IEでもwidth,heightの値を使用します。デフォルトサイズは上述のようにスタイルシートで定義すればできるはずです。また、IEの場合は$html_transitional=1;としてiframeで、その他はobjectタグで表示するようになりました。config.php の仕様を理解していないのでconfigページでの設定には今のところ対応していません。iframe,objectなのでブロック要素は消して、インライン要素のみにすべきなのでしょうか?
そういえば、アドレス指定には正規表現を使用しているので、. がまずいですよね。でも . をそのまま打てないのは設定する時にめんどくさいですし。だからといって、正規表現を使えないようにすると拡張性が乏しくなりますし。悩みどころです。
sonotsさんが改変されたものを導入させていただきました。ありがとうございます。一つ質問なのですが、アドレス指定でドメイン全体を指定することは可能でしょうか。掲示板のアドレスを追加したところ、うまく呼び出せませんでした。アドレスには、「?」「&」と日本語が混じっているので、これが原因だと思います。ドメイン単位で指定できればこれが解決できるのではないかと思います。アドレスの指定方法等が良く分からないので、どうぞよろしくお願いします。
それはやっぱりアドレス指定に正規表現を使用しているせいですね。ドメイン単位で指定しやすいように正規表現にしています。例えば
$iframe_accept_url = '^http://www.google.co.jp$|^http://www.yahoo.co.jp$';を
$iframe_accept_url = '^http://www.google.co.jp$|^http://www.yahoo.co.jp';のように $ をはずせば、http://www.yahoo.co.jp/hogehoge なものなどすべて許可することになります。 正規表現にすると ? や . で失敗し、完全マッチにするとドメイン指定ができなくなる。 あちらを立てればこちらがたたずです。ん?両方やればいいだけですね。
iframe.inc.php.4 あ、XSS 脆弱性。
sonotsさん、度々ありがとうございます。ドメイン指定で無事動きました。
#iframe(http://pukiwiki.sourceforge.jp[,iewidth=50%,ieheight=50%,width=50%,height=50%)の様に指定しても、cssでの値が優先されてしまい個別に設定できません。正しいコマンド指定例はどの様なものでしょうか?よろしくお願いします。 -- 2004-09-07 (火) 08:50:24
#iframe(http://xxx.xxx.com/xxx.html,iewidth=500,ieheight=500,width=500,height=500)の様に指定しても、cssでの値しか適用されません。sonotsさんのバージョンを全て試させてもらい、文法も考えれる限り色々と試したのですがだめでした。度々申し訳ありませんが、他に何か原因と思われることがあれば御教授して頂きたいです。 -- 2004-10-29 (金) 23:30:58
選択肢 | 投票 |
凍結 | 14 |
現状(許可するURLを設定) | 9 |