- - PR -
Javascript でコントロール名の取得
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-12-26 13:50
回答ではありませんが。
>string.Format("<script type='text/javascript'> {0} <" + "/script>" この "<" + "/script>" エスケープはサーバコード内では不要です。 これが JavaScript 上で問題となるケースは以下のように書いたときだけです。
このようなケースのとき、 "<scr" + "ipt>" + func + "<" + "/script>"; この部分の 閉じタグが </script> となっていると、 本来の閉じタグではないところで閉じタグと誤って解釈 してしまうのですね、IEのHTMLパーサーは。 >string.Format("<script type='text/javascript'> {0} <" + "/script>" なお、サーバーコードでエスケープしても、これじゃ生成されるコードは エスケープされませんよ。生成される時点では問題ないでしょうけど、 クライアントのHTMLパーサーのバグ?回避の術ですのでむやみな乱用は 難読コードになっちゃいますね。 | ||||||||||||||||
|
投稿日時: 2008-12-26 16:27
お世話になります。
どうもこのエラーは、string.Format("...{" 内に閉じカッコのない始まりだけのカッコがありエラーとなっていたようです。ヘルプにサンプルがあったため下記のように書き換えました。 ただ、cs.RegisterArrayDeclaration("LinkButtonIDs が吐き出すコードは、ページの終りのほうで、cs.RegisterClientScriptBlock(cstype,... は、ページの上部です。 そのためか、実行時に、「識別子がありません」というエラーメッセージが出ます。
また、cs.RegisterArrayDeclaration("LinkButtonIDs が吐き出すコードは、 下記の //<![CDATA[ のあたりで「文字が正しくありません」と出ます。
これらのエラーについておしえてください。 また、「ぴあちゃん」に教えていただいた > "<" + "/script>" エスケープはサーバコード内では は、正しく動作しなかったので今回はつけたままにしました。 (途中で止まった) | ||||||||||||||||
|
投稿日時: 2008-12-27 01:18
>これらのエラーについておしえてください。
さすがにこれはダメダメ。強いてやるならば、 var num:int だけど、Js2.0 の文法だからね。。。 >また、「ぴあちゃん」に教えていただいた >> "<" + "/script>" エスケープはサーバコード内では >は、正しく動作しなかったので今回はつけたままにしました。 >(途中で止まった) 激しく誤解しています。というか、"<"+"/script>" の意味を知らないで 使っていたんですね? >cstext.Append("<script type=text/javascript>\n"); > cstext.Append("var LinkButtonIDs;\n"); > cstext.Append("function DoCopy(var num) {\n"); > cstext.Append(" if(self.clipboardData) {\n"); これもダメダメ。一概にダメダメとは言えないけど、スクリプトエラー で悩んでいる時点でダメダメ確定かと。 動く実績を作ってからハードコーディングして下さい。 「手書き&動くであろう」な見切り発車で書いちゃうから実行時 エラーで壁にぶつかるんですよ。 コードの中にスクリプトを直接入れないで外だしにして下さい。 外だしか直接埋め込むかは意見が分かれるかもしれませんが、 現状、あなたの書き方を見ているとちゃんと動いた実績のある ソースを作ってからそれをファイル化して、StreamReader 等 で読み込んでから利用するなどした方がミスの少ないコードが 書けるかと考えます。 リソースファイルとして xx.js を取り込むなり、xml の CDATA セクション利用してJavaScriptパーツとして読み込むなり工夫 した方がいいでしょうね。
こんなXMLファイルこさえてリソースとして取り込んでそれをXMLReader で読み込んでやったらいいかと思いますね。 で、肝心なのは、ASPXファイルの中で直接
を書いて正しく動くことを確認してから、リソース化するなり ハードコーディングすることです。 C#の文字列はダブルクオートで囲むので、JavaScriptのスクリプト 中にダブルクオートが使えなくなる、というか、クオートをエスケープ しなくちゃならなくなるので面倒ですよね、C#のコードに埋め込むと。
とりあえず、これはエラーになりました。 [ メッセージ編集済み 編集者: ぴあちゃん 編集日時 2008-12-27 01:31 ] | ||||||||||||||||
|
投稿日時: 2008-12-28 13:01
お世話になります。
よくわからないのですが、下記のコードで急に動作するようになりました。 多少変更しましたが、理由はわかりません。 > 、"<"+"/script>" の意味を知らないで使っていたんですね? というか、単なる閉じカッコという認識です。C#でいう”{”のようなもので なければ、文法的にエラーになるので必要。と思っているだけです。 これって、大きく違います?? > xml の CDATAセクション利用してJavaScriptパーツとして.... 調べてみたのですが、「スクリプト言語およびサンプルの XML や HTML を含める際に広く使用されています」とあるので、 RegisterArrayDeclaration や RegisterClientScriptBlock 的なもの? ただ、これってサーバ側のコードとして記載するものですか?
| ||||||||||||||||
|
投稿日時: 2008-12-28 14:05
大きく勘違いしていると思うね。それに「C#でいえば{」じゃなくて「}」だろうに・・・ 閉じタグの意味だけで使っているならなぜ「"</script>"」と書かないの? なぜ「"<" + "/script>"」とわざわざ書くのか説明できるかな? エスケープという言葉の意味もわかっていないんじゃないの? つーかぴあちゃんが丁寧に説明してくれている書き込みがあるのになぁ。 | ||||||||||||||||
|
投稿日時: 2008-12-29 17:02
(利用規約違反のため削除いたしました。@ITクラブメンバーシップセンター)
| ||||||||||||||||
|
投稿日時: 2008-12-29 17:03
(利用規約違反のため削除いたしました。@ITクラブメンバーシップセンター)
| ||||||||||||||||
|
投稿日時: 2008-12-29 17:09
(利用規約違反のため削除いたしました。@ITクラブメンバーシップセンター)
|