下で"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ランキング
-
jqueryを使ったスムーススクロ...
-
【至急!!】Jqueryを使った下記...
-
「WKRTE」というjQueryのWYSIWY...
-
jQueryのSlickで矢印アイコンが...
-
javascriptで複数の表示・非表...
-
GoogleストリートビューAPIでイ...
-
「ご処理進めて頂きますようお...
-
Excelシート上のマクロを登録し...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
CloseとDisposeの違い
-
筋トレ初心者です。 ジムでひた...
-
アクセスVBAのMe!と[ ]
-
エクセルVBAで、MsgBox やInput...
-
緊急です。 知り合いから50kgの...
-
DoEventsがやはり分からない
-
UMLでの例外処理
-
「PC Helpsoft Driver Updated...
-
Excel ラジオボタンのリセット...
-
VBA リストボックスをダブルク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
動画の上に広告をオーバーレイ...
-
CSSでreadonlyの機能はあり...
-
jQueryでのドラッグアンドドロ...
-
formのsubmitを押すとモーダル...
-
Q&A掲示板の入力フォームに文字...
-
jqueryを使ったスムーススクロ...
-
確認ダイアログを次からは表示...
-
javascriptで複数の表示・非表...
-
javascriptのエラーで質問です。
-
特定の条件のHTML要素を一括で...
-
macかwinか判別しスタイルシー...
-
【JavaScript】検索がヒットし...
-
jQueryのSlickで矢印アイコンが...
-
javascriptでの(-)ハイフンの処...
-
クリックすると、色が変わるよ...
-
時間帯によってclass名を変更し...
-
フォームで「パスワード(確認...
-
3重のクォーテーション
-
SITEINFOの書き方について
-
【至急!!】Jqueryを使った下記...
おすすめ情報