こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

javascriptでwriteできない

カレンダーをjavascriptで作成しているのですが、以下でidocに書き込みしようとした際に、linkとbodyが書き込めずに困っております。
--------------------
var idoc = null;
cal="<title>カレンダ</title><script type='text/javascript'>var arGYear = new Array('1912','1926','1989');var arGDate = new Array('19120731','19261225','19890108');var arGengo = new Array('大正','昭和','平成');var arGengoI = new Array('T','S','H');var arHoliday = new Array('20170204','20170205','20170210','20170211','20170212','20170218','20170219','20170225','20170226','20170304','20170305','20170311','20170312','20170318','20170319','20170320','20170325','20170326','20170327','20170401','20170402','20170403','20170404','20170405','20170406','20170407','20170408','20170409','20170410','20170411','20170412','20170413','20170414','20170415','20170416','20170417','20170418','20170419','20170420','20170421','20170422','20170423','20170424','20170425','20170426','20170427','20170428','20170429','20170430','20170501');</script><script type='text/javascript' src='./js/ifrmCalendar.js'></script><link href='css/ifrmCalendar.css' rel='stylesheet' type='text/css' /><body></body>";
idoc.write(cal);
--------------------

現状、IE11,cromeでの再現を確認しています。(firefoxは未試験)
どのようにすれば書き込めるものでしょうか。
退職者から引き継いだPCで、退職者が使用していた際には発生していなかったのですが、私が当該PCにアカウント作成して使用するようになってから発生しております。
環境回りも確認しているのですが、それと思われるものも見つけられません。

お教え頂けますと幸いです。
よろしくお願いいたします。

投稿日時 - 2017-08-12 17:55:37

QNo.9362246

すぐに回答ほしいです

質問者が選んだベストアンサー

>>別のファイルで処理している可能性があります。

>残念ながら、そういった処理は行われていないようです。

逆に他のファイルから そのファイルが参照されている可能性もあります。
そのファイルの拡張子が「js」になってませんか?

投稿日時 - 2017-08-14 18:05:29

補足

ファイル名は「ifrmCalendar.js」です。
内部参照のような形式なのかと思いますが、よく分かりません・・・。

投稿日時 - 2017-08-14 19:29:27

お礼

色々と試していると、VisualStudioのデバッグではなくIISから見ると動くことが判明しました。javascript単体の話ではなさそうなので、以下で新規質問とさせて頂きました。
------------------------------
VisualStudioとIISでのJSの挙動
https://okwave.jp/qa/q9363254.html
------------------------------
何度もご回答頂いたamanojaku1様にベストアンサーを付け、ここではクローズさせて頂きます。
よろしければ新規質問もご確認願います。

投稿日時 - 2017-08-15 13:43:41

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.7

>>idoc = target.contentDocument;
>↑良く分かりませんが、「target」変数に何か代入されてますか?

target変数への代入を探されているようですが、No2に補足に
var target = parent.document.getElementById( id );
..
idoc = target.contentDocument;
とあるので、これのことですよね。

前後が不明ですが、document.writeでなくオブジェクトの.writeを使っているということは
親ウィンドウから、iframeの子ウィンドウのコンテンツを触っているのでしょう。

本題の、linkやbodyができない件ですが、
ブラウザのJavaScriptのデバッガを使って、どこで止まっているか確認してみては
どうですかね。

投稿日時 - 2017-08-15 09:06:52

お礼

デバッガでは、直前まで変数calにlinkもbodyも保持していますが、writeすると消失してしまいます。

投稿日時 - 2017-08-15 13:40:31

ANo.6

>ファイル名は「ifrmCalendar.js」です。

「js」ファイルはライブラリーのような物で、本体から参照して使われます。
拡張子が「html、htm」(大文字の場合もあります)のファイルの中で「ifrmCalendar.js」を参照している本体(ファイル)があるハズです。

投稿日時 - 2017-08-14 23:20:42

ANo.4

cal 変数の代入文中に、 </script> という文字列が2箇所ありますが
これを このJavaScriptの終端と誤認識してしまっているのかもしれません。

</script>

</s" + "cript
のように分解してみてはどうでしょう?

投稿日時 - 2017-08-14 11:50:54

お礼

残念ながら、影響なしでした。

投稿日時 - 2017-08-14 16:40:09

ANo.3

>再確認したのですが、上記以外の処理はしていないようです。
>どうしたものか、頭を抱えております・・・。

別のファイルで処理している可能性があります。
ファイルの先頭の方で下記のような感じで別ファイルを参照してないかチェックしてみて下さい。

<script language=JavaScript type=Text/JavaScript src="ファイル名"></script>

投稿日時 - 2017-08-14 02:05:21

お礼

残念ながら、そういった処理は行われていないようです。

投稿日時 - 2017-08-14 16:39:51

ANo.2

>idoc = target.contentDocument;

↑良く分かりませんが、「target」変数に何か代入されてますか?

投稿日時 - 2017-08-12 20:21:32

補足

再確認したのですが、上記以外の処理はしていないようです。
どうしたものか、頭を抱えております・・・。

投稿日時 - 2017-08-13 14:19:14

お礼

会社を出てしまったのでPG確認出来ませんが、先の補足に書いた以外の処理はなかったかと思います。
が、ひょっとするとparent側で何かしているかもしれません。
明日、確認して補足に記載します。
よろしくお願いいたします。

投稿日時 - 2017-08-12 21:40:19

ANo.1

>idocに書き込みしようとした際に、linkとbodyが書き込めず

通常「write」メソッドは「document」オブジェクトの「write」メソッドを使うものですが?

document.write(~);

投稿日時 - 2017-08-12 19:14:26

補足

PG抜けていて申し訳ありません。
以下が全体の流れになります。
--------------------
var target = parent.document.getElementById( id );
var idoc = null;
idoc = target.contentDocument;
var cal="<title>カレンダ</title><script type='text/javascript'>var arGYear = new Array('1912','1926','1989');var arGDate = new Array('19120731','19261225','19890108');var arGengo = new Array('大正','昭和','平成');var arGengoI = new Array('T','S','H');var arHoliday = new Array('20170204','20170205','20170210','20170211','20170212','20170218','20170219','20170225','20170226','20170304','20170305','20170311','20170312','20170318','20170319','20170320','20170325','20170326','20170327','20170401','20170402','20170403','20170404','20170405','20170406','20170407','20170408','20170409','20170410','20170411','20170412','20170413','20170414','20170415','20170416','20170417','20170418','20170419','20170420','20170421','20170422','20170423','20170424','20170425','20170426','20170427','20170428','20170429','20170430','20170501');</script><script type='text/javascript' src='./js/ifrmCalendar.js'></script><link href='css/ifrmCalendar.css' rel='stylesheet' type='text/css' /><body></body>";
idoc.write(cal);
--------------------

私自身はjavascriptに詳しくなく、この書き方が妥当なのかが判別出来ず、引き継いだものがそうなっていたとしけ言えない状況です。
よろしくお願いいたします。

投稿日時 - 2017-08-12 19:37:19

お礼

ご回答ありがとうございます。
補足コメントにもう少しPGを書きました。
知見をお借りできますと幸いです。

投稿日時 - 2017-08-12 19:44:30