redirect.inc.php†
サマリ | 指定ページにリダイレクト(自動転送)するプラグイン |
リビジョン | 1.01 |
対応バージョン | 1.4.x |
投稿者 | katamari |
投稿日 | |
指定ページにリダイレクト(自動転送)するプラグイン
n秒後に、指定したページに自動的に移動するプラグインです。
#redirect(移動先ページ名,待ち秒数)
これを記述した部分は
例:
3 秒後に FrontPage に移動します。
(移動しない場合は、上のリンクをクリックしてください。)
と出力され、待ち秒数経過後そのページにジャンプします。
→alias.inc.php との相違点
ダウンロード†
redirect.inc.php-1_03
(右クリックで保存→"redirect.inc.php"にリネーム)
使用例†
3秒後にFrontPageにジャンプします。
#redirect(FrontPage, 3)
食べ物/納豆 ページにジャンプします。秒数を省略すると、5秒後にジャンプします。
#redirect(食べ物/納豆)
オプションを変更すると、外部にも自動転送することができます。プラグインファイル内の説明をよく読んで利用してください。
#redirect(http://google.co.jp,10,Google)
便利そうな使い方†
食べ物/納豆 というページで納豆について熱く語っていたとして、
かつ他のページ中の「納豆」という文字列に自動リンクさせたい場合、
- 納豆というページを作って
- そのページ #redirect(食べ物/納豆) と記述
すれば、納豆リンク→「納豆」ページ→「食べ物/納豆」ページと遷移させることができるようになります。
- 【重要】プレビュー中も転送が有効になるので、(特に秒数を短く設定した場合)急いで更新してください(笑)
- 移動にはJavascriptを使用しているので、Javascriptが無効な場合は移動しません。
更新履歴†
- 1.03 (2005-01-18)
- XSS対応
- 空白入りのページにジャンプできない障害に(ちゃんと)対応
- 「0秒後にジャンプ」はできなくしました。
- 1.02 (2005-01-17)
- 空白入りのページにジャンプできない障害に(とりあえず)対応
- 注釈つきで外部リンクを復活
- 1.01 (2005-01-16)
- 1.0 (2005-01-16)
ライセンス†
GPL
alias.inc.php との違い†
同じようなプラグインとして alias.inc.phpがあります。
すいません、存在に気づかず同じようなプラグインを作ってしまいました。あほです(笑)気づいてればこれ作ってなかったかも。。。
違いは以下のような点です:
- alias.inc.php は 埋め込み元ページが表示されず、一瞬で移動します。
redirect.inc.phpの場合、埋め込み元ページも表示され、移動までに待ち時間があります。
- alias.inc.php は基本的にどのようなブラウザでも動作するはずです。
redirect.inc.phpの場合、Javascriptで転送を実現しているので、ブラウザの環境によっては動作しない場合もあるかも。
コメント†
- alias.inc.phpとの違い(メリット/デメリット)を書いた方が良いかもしれません。あと、任意のURLに飛ばされてしまうのはかなり危険です。続・質問箱/521のブラクラのあたりが参考になるかもしれません(このプラグインを使っている他のPukiWikiサイトとの間で無限ループとかも可能に…)。 --
- がーーん…alias.inc.phpの存在自体に気づいてなかったです。ありがとうございます。馬鹿すぎ>自分。とりあえず違う点を追記しておきます。 -- katamari
- 外部リンク機能は使う可能性がなきにしもあらずなので、オプションでon/offを切り替えられるようにするといいかもしれません。 --
- alias.inc.phpの作成者です。こちらも今日ちょうどアップデートしてました(^^;。数秒待ってジャンプという需要も結構ありそうですね。ページ名を変更する時とか複数のページを1ページにまとめる時とかに
、元のページをいきなりrenameや削除をするんじゃなくて、しばらく共存させて変更をアナウンスするとか。 -- コチ
- おお、そう言っていただけると救われます~。alias.inc.php を知ったときは、このページ消そうかと思ってしまいましたw -- katamari
- ページ名にスペースを入れているのですが、urlencode のせいで + になって失敗します。その urlencode ではなく、pukiwiki 用のURLエンコードをする関数を使わないといけないと思います。func.php の encode でしたっけ?あれ、% がないからちょっと違うか。まぁどこかにあったと思います。 --
- 「どこか」を探しきれなかったので、ちょとベタな対応しました(1.02)。とりあえず、空白, -, /, . はOKなことを確認しています。ほか不具合ありましたらお知らせくださいませ。 -- katamari
- ↓で指摘いただいたrawurlencode()にして確認したところ、これでOKっぽいです。(v.1.03) -- katamari
- XSSの脆弱性があります。それと、(あまり怖くはないですが)ジャンプ先に自身のページを指定できたり、ページA⇒ページB⇒ページAというようにジャンプ経路をループさせられたり、MenuBarでも使用できたりするようなので、現状では荒らしの手段になってしまうと思います*1。
あと、エンコードについてはrawurlencode()を使うのが良いかと。それから、スキンが実行されるのはbodyがconvertされた後なのでmetaタグを動的に挿入できるんじゃないでしょうか。 --
- ありがとうございますお恥ずかしいです。。。v.1.03にてXSS対策をとりました(HTMLサニタイズするようにしました)。荒らしについてですが、とりあえず0秒指定ではジャンプさせないようにしました。まあ1秒あれば何か対応できるかなぁと。あと、rawurlencode()ありがとうございます。metaタグてのは 'http-equiv=refresh'ですよね? Javascriptよりはそちらの方が堅そうですね。折を見て対応してみようかと思います。 -- katamari
- チャット的な掲示板を考えてまして、デフォルトで同じページをリロードするようにプラグインを改造したいのですが、どこを変更すれば良いでしょうか? -- sakai
- 単に引数に自分のページ名を渡せば可能だと思いますが、更にそれをデフォルト動作にする必要があるのでしょうか? --
- 利用者に自由に会議室を開いていただこうと思っているのですが、他のページに跳んだり、更新時間を変更されることは避けたいのです -- sakai
- なるほど、そういうことであれば。
43行目付近を下のように修正。(15秒の例)
- list($to, $sec, $page_name) = func_get_args();
- $to = htmlspecialchars($to);
+ $to = $page_name = $vars['page'];
+ $sec = 15;
で、67,68行目を削除。
-<strong>$sec</strong> 秒後に <strong><a href="$redirect_to">$page_name</a></strong> に移動します。<br />
-(移動しない場合は、上のリンクをクリックしてください。)<br />
でどうでしょうか。作者さんではないので適当ですが。
- ありがとうございました。うまくいきました。 -- sakai
- 配布されているファイルのヘッダは1.02ですけど,中身は1.03なんですよね?
本ページ上部のリビジョンは1.01だったりですけど。。。 -- がこ