人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

javascript内のscript記載の動作について質問です。
PHP + Smarty + Mysql + Javascriptでサイトを作っています。


<div id="myText1">
</div>
<a href="javascript:void(0)" onClick="change('myText1','<script src="http://static.fc2.com/video/js/outerplayer.min.js" url="http://video.fc2.com/a/content/20140901yh9ye1xU/" tl="タイトル" sj="73000"></script>')">リンク</a>

上記のように下のリンクをクリックすると上の
<div id="myText1"> </div>
の中にリンクタグ内にあるscriptの部分を表示します。(FC2動画貼り付けタグ)
*head内のscript部分は省いています。
ただ上記のまま実行しようとしても動作しません。
scriptの部分を消してテキストのみにすると動作します。
おそらくエスケープ処理していないからではと思いいろいろやってはみましたがだめでした。

このクリックでscript内のscriptを動作させるののはどうすればよいのでしょうか?

●質問者: numb08
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●300ポイント

change 関数の中身が分からないので、試してませんが、以下のように書き換えるとどうなりますか。

 onClick="change('myText1','<scr' + 'ipt src="http://static.fc2.com/video/js/outerplayer.min.js"
 url="http://video.fc2.com/a/content/20140901yh9ye1xU/"
 tl="タイトル" sj="73000"></scr' + 'ipt>')"

見切れちゃうので改行を入れてますが、一行にして大丈夫です。

 '<script>' → '<scr' + 'ipt>'
 '</script>' → '</scr' + 'ipt>'

と、してるということです。


いや、違うな。
こうかな。

 onClick="change('myText1','<script src=\"http://static.fc2.com/video/js/outerplayer.min.js\"
 url=\"http://video.fc2.com/a/content/20140901yh9ye1xU/\"
 tl=\"タイトル\" sj=\"73000\"></script>')"

onclick の内側にあるダブルクォートを、バックスラッシュでエスケープ。
こっちのような気がします。
見切れてますけど、script の src 属性を閉じるダブルクォートもエスケープです。






追記です。

やっぱりこれで。

 onClick="change('myText1','<script src=\'http://static.fc2.com/video/js/outerplayer.min.js\'
 url=\'http://video.fc2.com/a/content/20140901yh9ye1xU/\'
 tl=\'タイトル\' sj=\'73000\'\></script>')">リンク</a>

script タグの中にある属性をくくってるダブルクォートを、シングルクォートに変えて、バックスラッシュでエスケープです。

ちなみに、change にタグを渡すと、テキストになって見えるんでしょうね?
change の実装は、こんなのを想定してます。innerHTML ではなく、textContent という。

<script>
function change(id, t) {
 var e = document.getElementById(id);
 e.textContent = t;
}
</script>

numb08さんのコメント
返信大変遅くなり申し訳ありません。 上記いろいろ試してはみましたがだめでした。 script部分は <script Language="JavaScript"><!-- function change(tID,str) { document.all[tID].innerHTML = str; } // --></script> です。 FC2動画タグの部分のシングルクォートあるいはダブルクォートを抜いてみたところ正常にチェンジしました。ですがHTML上には動画が表示されませんでした。なんらか動作させるタイミングなど別の問題があるかもしれません。 本件ありがとうございました。もうしばらく調べてみます。

numb08さんのコメント
追記です。 textContent ではそのままテキストが表示されるので動画は表示されませんでした。

a-kuma3さんのコメント
html をそのまま表示するのではなく、スクリプトを動かしたいんですね。 関数 change を、以下のようにしてみてください。 >|html| <script> function change(tID,str){ document.getElementById(tID).innerHTML = str; } </script> ||< all は、古いIE でしか正しく動作しません。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ