
下で"JavaScript内からJavaScriptを書き出したいのですが"で質問したものですが,ソースコードを簡単にして再質問したいと思います.
ソースは以下のようにし,divタグのところにinnerHTMLで文字"test"とJavaScriptでアラートを表示させるものです.表示してみたところ,"test"は表示されるのですが,アラートは出てきません.
これはinnerHTMLではHTMLのタグは評価されるが,JavaScriptは評価されない,ということなんでしょうか.JavaScriptのこのような仕様は調べにくいので困っています.回答宜しくお願いします.
<html><head><title></title>
<SCRIPT type="text/javascript">
<!--
var str='<font color="blue">test</font><script type="text/javascript">alert(123);</script>';
function gogo(){
document.all("here").innerHTML = str;
}
//-->
</SCRIPT>
</head><body>
<div id="here" style="position:absolute;width:600px;left:0px;top:0px;"></div>
<SCRIPT type="text/javascript">
<!--
gogo();
//-->
</SCRIPT></body></html>

No.1ベストアンサー
- 回答日時:
Mac OS10.3 , IE5.2ですが、記載されているもので「123」のアラートが出てきましたよ。
Windowsをご使用とのことだったと思うので、その違いかもしれないですね。
ご使用のブラウザがJavaScript無効になってたりは…しませんよね(^^;
回答ありがとうございます.
以前の質問でinnerHTMLはIE特有の・・・と教えていただいたのですが,私の持っているJavaScriptの本にWin,MacのIE,Netscapt,Mozillaにて動作すると書いてあったので,大丈夫だろうと考えていました.
しかし,実際に試してみたところ,
WinIE・・・文字の出力は○(フォントの色も)
MacIE・・・アラートも表示
Netscape(Win,Macともに)・・・文字すら出ず
Mozilla(Win,Mac)・・・文字すらでず
Camino,Safari(Mac)・・・文字すら出ず
で散々な結果でした.
皆さんが言うように,innerHTMLはあまり使わない方がよさそうだと実感しました.
ありがとうございました.
No.3
- 回答日時:
本文の gogo(); が評価された後、実行の流れは
//-->
</SCRIPT></body></html>
これを残すのみです。
<div id="here">
の中身を書き換えても評価されずに終了しますから、
alert は出ません。
ですから実行している gogo(); よりも後ろ、</body>までの間の内容を書き換えれば実行されるはずです。
"test"の文字列は document.all("here").innerHTML を書き換えた時に副作用として画面でも表示されます。
書き換えること自体がスクリプトを実行するべきものではないことは、gogo()の後ろにまだほかのスクリプトが残っていればスクリプトの流れが分岐してしまうことから自明だと思います。
返答ありがとうございました.
やはり,innerHTMLでHTMLを挿入->挿入されたHTML(JavaScript)が評価されるわけではなさそうですね.
他にも方法がないかいろいろ調べてみようと思います.
No.2
- 回答日時:
前回のご質問でもご指摘されていたようにinnerHTMLはIEのみ動作し、レイアーに指定されたHTMLを書き出す関数としていながら、ハイパーリンク(<A href~>)すらまともに書き出す事が困難な関数なのです
※ DynamicHTML上での話しです
せいぜい<BR>タグを使ったテキスト程度が無難です
また、#1様の結果から明らかなようにIEに関してMacとWinは別物の動作をする事がたびたびあります
(実際Win環境ではアラートは出ませんでした・・・Javascriptを書き出すのを失敗している)
私なら、ご質問の動作をさせたいと考えた時
スクリプトを書き出すという事を考えずに
<SCRIPT type ="text/Javascript">
<!--
var staTag ="<P style='width:200px;height:50px;font-size:10pt;'>";
var endTag ="</P>";
function info1(a){
if(document.getElementById){
document.getElementById("Layer1").innerHTML = a;
}
if(document.all){
document.all["Layer1"].innerHTML = a;
}
if(document.layers) {
with(document.layers["Layer1"].document){
open()
write(staTag + a + endTag)
close()
}}
alert("123")
}
//-->
</SCRIPT>
</HEAD>
<BODY onload="info1('test')">
<DIV id="Layer1" style="position:absolute; width:200px; height:50px; z-index:1; left: 10px; top: 100px;font-size:10pt;">
</DIV>
</BODY>
と書きます(IE4、NN4以降Mozilla等動作します)
この場合の9行目のinnerHTMLはDOMの仕様としてNNでも動作(NN6以降)しています
※ この場合でも<BR>を含むテキストを表示する程度です
この後 どのような動作をご希望なのでしょうか そのあたりを書いて頂けるとアドバイス程度は出来るのですが
私 Javaは残念ながらわかりません あしからず
回答ありがとうございます.
レイヤーに文字を書き出す方法としてinfo1関数中の3つめのような方法があるとは.
勉強になりました.
残念ながら,このプログラムの目的は訳あって説明することができません.申し訳ありません.
皆さんからの回答を参考に,(特に他ブラウザ,他OSでの挙動)JavaScriptの勉強,プログラミングをしていきたいと思います.
ありがとうございました.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javascriptで複数の表示・非表...
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBA エンターキーでイベントに...
-
Excelシート上のマクロを登録し...
-
エクセルVBAで、MsgBox やInput...
-
switch の範囲指定
-
VB.NET Excelを読み込んでDataT...
-
ボタンクリックイベント 重複...
-
EXCEL VBA マクロ 実行する度に...
-
VBAでループ内で使う変数名を可...
-
CloseとDisposeの違い
-
月度は何て読みますか?
-
Googleフォーム・複数人の申し...
-
【Excel】特定の文字を含むセル...
-
VBAでCOPYを繰り返すと、処理が...
-
UMLでの例外処理
-
UPS警告音を止めたい
-
Excelで、ボタンにコメントをつ...
-
マクロを登録しているボタンが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
折りたたみを全て開いて別ペー...
-
確認ダイアログを次からは表示...
-
javascriptで複数の表示・非表...
-
特定の条件のHTML要素を一括で...
-
改行をしたいが、<br>と...
-
CSSでreadonlyの機能はあり...
-
macかwinか判別しスタイルシー...
-
SITEINFOの書き方について
-
ブラウザの表示領域から高さを...
-
vml フォントの大きさ変更
-
フォームで「パスワード(確認...
-
【JavaScript】検索がヒットし...
-
タイプライタ風の文字を真ん中...
-
jqueryを使ったスムーススクロ...
-
jQueryのCSSで値に変数を使う方法
-
webサイトに動画をはりつけ、ク...
-
年月日時分を指定してCSSを切り...
-
時間帯によってclass名を変更し...
-
2回目以降のページロード時には...
-
ブログパーツをレスポンシブ化...
おすすめ情報