昨日 IE で object タグ内が表示されなかったのは、どうやらセキュリティにひっかかったかららしい。
問題の設定は「ドメイン間でのデータソースのアクセス」というもの。
どうやら IE では一般的にデフォルトで「無効」になっているらしい。iframe では通るのだから意味はなさそうだけど(^^;
というわけで代替手段が必要になった。
まず考えたが plugin の利用。引数にサーチしたい内容などを渡して結果をはき出させればいいかな…と PHP マニュアル のマニュアルをチェック。
ポート 80 叩いて、GET して結果を取得すれば…いけそうな感じ。
と、ここで問題に気付く。rNote の plugin は BODY スキンでしか使えないのだ。
というわけで、ITEM スキンでも plugin を使えるように改造!
…しようと思ったけど、plugin の引数を可変にするためには、先に <%=$~%> の処理が終わってなければダメ。
でもこの処理が行われると <%=$plugin%> も消えてしまうのだ!
おお、見事なジレンマ♪
「あと、BODY用スキンで使用出来る置換命令のうち、<%=$include%> 命令以外は、ITEM用スキンでも全て一応使用出来る筈です。」はどうなったんだろう(笑)
というわけで <%=$~%> の処理後も生き残る <%AWS ~ %> タグを新設。もうやりたい放題やってるかも(^^;
で、出来たのがこんな感じ。
CreateHTML() の終わりの方に
// ヘンゼル Start
while( $tagstr = CheckAWSTags( $a, $opt ) ) $a = str_replace( $tagstr, AmazonWebServices( $opt ), $a );
// ヘンゼル End
を挿入。
あとはファイルの最後にでも
// AWS タグのチェック
// SkinTagChk() の完全なるパクリ(笑)
//
function CheckAWSTags( $str, &$opt )
{
$opt = '';
if(! preg_match('/<%'.HANSEL_AWS_TAG.'[[:space:]]*(.*?)%>/s',$str,$optstr)) return '';
$tagstr = $optstr[0];
$tmp = $optstr[1];
if( $tmp )
{
$tmp=preg_replace("/[\t\r\n".REPLASE_CHAR."]/",'',$tmp);
$tmp=preg_replace("/\\\\n/","\n",$tmp);
while(ereg("\\\\(.)",$tmp,$t)){
$tmp=str_replace($t[0],REPLASE_CHAR.sprintf("%02x",ord($t[1])),$tmp);
}
while(mb_ereg("\"([^\"]*)\"",$tmp,$t)){
$t[1]=str_replace(' ',REPLASE_CHAR.'20',$t[1]);
$t[1]=str_replace('=',REPLASE_CHAR.'3D',$t[1]);
$tmp=str_replace($t[0],$t[1],$tmp);
}
$optlist = explode(' ',$tmp);
for($i=0;$i<sizeof($optlist);$i++){
list($key,$param) = explode('=',$optlist[$i]);
while(ereg(REPLASE_CHAR.'(.{2})',$param,$t)){
$param = str_replace($t[0],chr(hexdec($t[1])),$param);
}
$opt[$key]=$param;
}
}
return $tagstr;
}
// AWS の利用
//
function AmazonWebServices( $opt )
{
$url = HANSEL_AWS_DIR;
$flag = false;
foreach( $opt as $key => $value )
{
if( ! $key )
{
continue;
}
if( $flag )
{
$url .= '&';
}
else
{
$url .= '?';
$flag = true;
}
$url .= $key.'=';
if( strstr( $key, 'Search' ) )
{
$url .= urlencode( $value );
}
else
{
$url .= $value;
}
}
$fp = fsockopen( HANSEL_AWS_HOST, HANSEL_AWS_PORT, $errno, $errstr, HANSEL_AWS_TIMEOUT );
if ( !$fp )
{
return $str."$errstr ($errno)<br />\n";
}
else
{
$opt = str_replace( "&", "&", $opt );
fputs ($fp, "GET $url HTTP/1.0\r\n\r\n");
while( !feof( $fp ) )
{
if( strcmp( fgets( $fp ), "\r\n" ) == 0 ) break;
}
while( !feof( $fp ) )
{
$tmp = fgets( $fp );
if( !preg_match( '/<\?.+\?>/', $tmp ) ) $str .= $tmp;
}
fclose ($fp);
return $str;
}
}
を追加で OK(^^)b
…ん? けきょく PHP で処理するなら XSTL いらなかったのかも…???
とも思ったけどめんどうだからこれでいいや(笑)
というわけでだいぶ形になってきたかなぁ。
来週の rNote バージョンアップに対応したらすぐにでも移転できるかも♪

