待辦事項 #6209

テンプレートとブロック管理のプレビューでエラーになる場合がある
啟用日期: 2005-06-23 18:29 最後更新: 2005-08-25 08:15

回報者:
負責人:
(無)
類型:
狀態:
開啟
元件:
(無)
里程碑:
(無)
優先權:
5 - 中
嚴重程度:
5 - 中
處理結果:
檔案:

細節

テンプレートマネージャーのプレビューでエラーになる場合があ

xoops2.0.10 JP 以降
テンプレートマネージャーの
プレビューポップアップで

性格には、どういう場合かは、よくわかりませんが

先頭に例えば
<script type="text/javascript">
<!--
alert("test");
//-->
</script>
を書くと

かならず
javascriptの
witelnで、終了していない文字列型の定数ですエラー

不正なHTMLページになるためポップアップもしない

これは、仕様かな?たぶん違いますよね。
カスタムブロックプレビュー(HTML)も同じです

Ticket History (3/7 Histories)

2005-06-23 23:09 Updated by: toshimitsu
評語
Logged In: YES
user_id=6033

<script type="text/javascript">
<!--//
alert("test");
//-->
</script>

上記の例の場合


<script type="text/javascript">
<!--//
win = openWithSelfMain
("", "xoops_system_block_preview", 250, 200, true);
win.document.writeln("<html><head><meta http-
equiv=\"content-type\" content=\"text/html; charset=UTF-8
\" /><meta http-equiv=\"content-language\"
content=\"en\" /><title>domifaraoop</title><link
rel=\"stylesheet\" type=\"text/css\" media=\"all\"
href=\"http://domifara.lolipop.jp/xo/themes/mlang_stream/st
yle.css\" /></head><body><table><tr><th>ss</th></tr><tr><td
><script type=\"text/javascript\"> ");win.document.writeln
("<!--//");win.document.writeln("alert
(\"test\"); ");win.document.writeln("//--
> ");win.document.writeln
("</script> ");win.document.writeln
("</td></tr></table></body></html>");
win.document.close();
//-->
</script>
-------------------------------------------------------
このポップアップでは、
終了していない文字列型の定数は、
javascriptを含んだものはできない
2005-07-03 02:56 Updated by: okuhiki
評語
Logged In: YES
user_id=13441

\modules\system\admin\blocksadmin\main.php Line 99

echo 'win.document.writeln(
"'.str_replace('"', '\"', $line).'"
);';

ですが、xhtml文書内でjavascriptを書く場合コメント行で
も "<" ">"は変換して置かないと、誤動作するかもね?

echo "win.document.writeln(
unescape('".str_replace(
array("'","<",">"),
array("\'","%3C","%3E"),
$line
)."'));";

"<",">"を"%3C","%3E"に書き変えて、xhtml文書には書き出し、ポ
ップアップへの書き出し時には、javascriptのunescapeを使い、元
に戻して試ました。

私の環境では、動作していますがいかがでしょうか?
2005-07-03 03:40 Updated by: okuhiki
評語
Logged In: YES
user_id=13441

別に上げた方が良いかも知れませんが、同じコードですので、こち
らに書かせて頂きます。
Mysqlデバグモードのポップアップでも同様の記述が有ります。

\include\cp_functions.php Line 179

echo 'debug_window.document.writeln(
"'.str_replace('"', '\"', $line).'");';

これを、

echo "debug_window.document.writeln(
unescape('".str_replace(
array("'","<",">"),
array("\'","%3C","%3E"),
$line)."'));";

こちらは、はっきりとした症状は確認出来ていません
が、"<",">"を書き出さない方が、無難だと思いましたので。
2005-07-22 12:34 Updated by: toshimitsu
評語
Logged In: YES
user_id=6033

okuhikiさんへ
javscriptは私で確認しきれなくて
レスをずっとできなかったです。
私にはお手上げですのレス。

ほとんどはうまくいくのですが・・、
複雑すぎるときに、うまくないときもあるような、無いような?
ブラウザーがフリーズすることあるような?ないような?
2005-07-22 19:40 Updated by: okuhiki
評語
Logged In: YES
user_id=13441

こんにちは
怪しいコードを試して頂き、ありがとうございます。

そうですか、ダメでしたか。
あまり複雑なモノを書かない(書く知識が無い)ので、
私の環境では、綺麗に出ていたのですがね。

推測ですが、
スクリプトをコメントアウトしていなければ、問題ないのですが、
コメントアウトを行なっている場合は、
スクリプト中に有る「--」も問題有りかも。
また、「%」が元の文書中に有ると誤変換するかも。

echo "debug_window.document.writeln(
unescape('".str_replace(
array("'",'"',"<",">","--","%"),
array("\'","\"","%3C","%3E","%2D%2D","%25"),
$line)."'));";

試していませんが、こんな書き方でいかがでしょうか。

私も、javascriptを知っているわけではないです。
怪しいモノか、利便性の有るモノなのかすら判らないので、
javascriptの実行は標準で禁止に設定している程度の知識です。
2005-08-24 22:50 Updated by: (del#8225)
評語
Logged In: YES
user_id=8225

レスが遅くなりましたけど、tplsets/main.phpの1274行目の、
foreach ($lines as $line) {
echo
'preview_window.document.writeln("'.str_replace('"', '\"',
$line).'");';
}


foreach ($lines as $line) {
$segments = preg_split('/(<\/?scrip)/',$line, -1,
PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);

foreach($segments as $segment) {
echo
'preview_window.document.write("'.str_replace('"', '\"',
$segment).'");';
}
echo 'preview_window.document.writeln("");';
}

に変更すると、うまくいきませんか?
<script> を <scrip と t> に分割して出力する事によって何とか
なりそうなんですけど。
2005-08-25 08:15 Updated by: okuhiki
評語
Logged In: YES
user_id=13441

「<」「>」は、要素のタグを示す箇所以外で書き出せませんね。
ポップアップ書き出しスクリプト中の文字列部分ですから、実体参
照やエスケープ(%表記)する事も必要かと思います。

Attachment File List

No attachments

編輯

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » 登入