
お世話になります。
prototype.jsを使って開発をしております。
Ajax.UpdaterにevalScripts: trueを設定し
request.responseTextにjavascriptが記述されたものを返しているのですが
javascriptに<(小なり)、>(大なり)があると
><に変換されてしまい、javascriptが正常に動作しません。
なければ正常に動作します。
恐らくはrequest.responseTextに返す前にPHPで
$xsl = new DomDocument();
$xsl->load("hoge.xsl");
$processor = new xsltprocessor();
$processor->importStyleSheet($xsl);
echo $processor->transformToXML($xml);
とパースをかけていることが原因だと思うのですが
何か対処法はありませんでしょうか?
どうぞよろしくお願い致します。
xslに書いてあるjavascriptの内容
<script language="javascript" type="text/javascript">
// <![CDATA[
test = function(hoge){
if(hoge > 3){
alert("over");
}
};
// ]]>
</script>
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1875880
を参考にCDATAをscriptの中に書いたり、外に書いたりと試しましたが
ダメでした。当然か。。。
<script type="text/javascript" src="./hoge.js"></script>
という風に外部ファイルとしてなら恐らく上手くいくと思うのですが・・・。
No.4ベストアンサー
- 回答日時:
実際に試していませんけど、
transformToXML の出力は文字列ですから、
echo する前に、一旦文字列変数で受けて、変換(&gt;→>とか)できないですか?
BLUEPIXY様、ご教授有難う御座います。
ただ今時間が無いので試しておりませんが
多分出来ると思います。
ただその場合、不等号だけではないということが問題です。
自分だけ、その箇所だけ、というならこの方法でも構わないのかもしれませんが・・・。
scriptタグの中だけエスケープ処理を外すのがよいのでしょうか。
ちなみに外部ファイルの宣言で上手くいきませんでした。。。
No.5
- 回答日時:
#4>scriptタグの中だけエスケープ処理を外すのがよいのでしょうか。
そうですね。それが目的ですから。
BLUEPIXY様、ご教授有難う御座います。
結果から言いますとダメでした。
transformToXMLした後にhtmlspecialchars_decodeをしましたが、&gt;のまま。
javascriptにて受け取ったreq.responseTextの&gt;をreplaceしてもダメでした。
結局Ajax.UpdaterにevalScripts: trueを設定したら
自動的にエスケープされてしまうのかなぁーと。
で、やっぱり外部ファイルとして宣言しようと思ったのですが
<script language="javascript" type="text/javascript" src="hoge.js"></script>
が読みにいってくれない。
何が原因か分かりますでしょうか?
No.3
- 回答日時:
PHPとprototype.jsについては詳しくないですが、
> echo $processor->transformToXML($xml);
で出力しているのはXMLですよね?
responseTextをeval()して利用出来るのはXMLではなくJavaScriptだけですから、
> echo $processor->transformToXML($xml);
の部分を削除して、
Content-type: text/plain
または
Content-type: application/x-javascript
などのコンテントヘッダを出して、
echo "test = function(hoge){";
echo "if(hoge > 3){";
echo "alert("over");";
echo "}";
echo "};";
としないといけないと思いますが、そういうことではないのでしょうか?
はずしてたらすみません。
talooさん、ご教授有難う御座います。
すみません。説明不足でした。
XML+XSLTでXSLTの中にjavascriptを記述しています。
No.2
- 回答日時:
No.1です。
No.1は間違っていました。もし,Math.log()を使うのであれば,対数関数への引数が負の時のほかに,引数が1になるとき(hoge==2のとき)の処理も追加してください。すみませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jsonテキストデータの並び替え...
-
jsで質問です。 formをsubmitし...
-
スマホ上で、左右スワイプで次...
-
Outlookのアカウントがあるとメ...
-
オブジェクト配列の各メンバを...
-
初心者です。gulpでコンパイル...
-
タグを教えてください。
-
ラジオボタンを複数選択したと...
-
2025年相性がいい人のサイトの...
-
CookieをWebStoeageに変える
-
Adobe acrobat proでフォームを...
-
jqueryのselect2で検索欄の文字...
-
<tr>指定した表の行要素をボ...
-
食材の期限を管理するためにGAS...
-
ビデオのJSについて
-
鍵盤アプリで、スマホの画面に...
-
<div>のタッチ状態を維持したま...
-
jQueryでシンセサイザーを作っ...
-
プログラミング 学習
-
HTMLでサブフレームから親のス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コメント欄に顔文字一覧をつけ...
-
javascriptでexcel閉じる
-
六曜カレンダー
-
JavaScriptをメモ帳に記述して...
-
javascriptで日付を加算して表...
-
PowerPointで時計表示
-
JSPの処理の途中で、JavaScript...
-
VB.NET2003 テキストボックスに...
-
正整数の半角数字かどうか判定する
-
VBAによる第3、4水準文字の判定...
-
以下のコードを実行しても、オ...
-
初心者です。gulpでコンパイル...
-
ブラウザの横幅に応じてとある...
-
if(1){...}とはどういうことで...
-
VBA SORT Applyでエラー
-
エクセルVBA/ Formatで文字列が...
-
javascriptからサーバサイドの...
-
jQuery ui Datepicker 明日以降...
-
Javascriptエラーの原因が分か...
-
VBA ステータスバー DoEvents
おすすめ情報