現在、親ウィンドウからwindow.openで子ウィンドウを開き、window.openの戻り値であるウィンドウオブジェクトを操作し、親ウィドウから子ウィンドウへdiv要素を追加しようとしていますが
JavaScriptエラーとなっておりうまく動作しません。
以下のようなJavaScriptを実行しています。
【親ウィンドウのJavaScript】
var url = "./child.html";
targetWindow = window.open(url, "chatWindow",
"width=250,height=350,menubar=no,status=no,scrollbars=no");
var contactInnerArea = targetWindow.document.getElementById('contactInnerArea');
var messageElement = $('<div class="sendbox">').text(value);
contactInnerArea.appendChild(messageElement);
以下の行で「catch ステートメントでは適用されますが、throw ステートメントでは適用されません。」のエラーが返ってきます。
contactInnerArea.appendChild(messageElement);
contactInnerAreaはデバッガで見たところ取得出来ているようです。
最初はjQueryのappendで実行していましたが、同様のエラーがjQuery内のappendChildで発生しておりました。
IEはバージョン11です。
ChromeとFirefoxでは正常に動作します。
解決策をご存知の方、お力添え頂けますでしょうか。
よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
動作は確認していないので申し訳ないですが、以下の3点に留意すれば解決できそうな気がします。
1)すでにANo1様がご指摘のように、ご質問のスクリプトではjQueryオブジェクトとDOM要素の混乱が見られます。
jQueryのメソッドにはjQueryオブジェクトを、DOMのメソッドにはDOM要素を用いるようにしてください。
2)新しいドキュメントを読み込みますので、スクリプトの実行のタイミングによっては、読込み終了前に実行される可能性があります。
念のため、document.readyState などで状況を確認しながら処理を行うようにした方が安全かと思います。
https://developer.mozilla.org/ja/docs/Web/API/Do …
3)ご提示の記述方法だと、異なるドキュメント間で要素の移動(orコピー)を行っています。
この場合はimportNodeやadoptNodeなどを利用する方が良さそうです。
https://developer.mozilla.org/ja/docs/Web/API/Do …
https://developer.mozilla.org/ja/docs/Web/API/Do …
IEは対応していなかったようですが、最近のものは対応しているのかも
https://msdn.microsoft.com/en-us/library/ms76752 …
https://msdn.microsoft.com/en-us/library/ff97520 …
一方、ご質問文でご提示の内容ならば、要素の移動などせずに子ウィンドウのドキュメント上で直接要素の生成などを行うことで、上記の移動等は不要にできるものと思います。
ご回答ありがとうございます。
document.readyStateでドキュメントが読み込まれたかはチェックを入れる事にします。
元々jQueryのみを使ってDOM操作していましたが、jQueryがうまくいかないのでgetElementById等が出現し混乱した状態になってしまいました。参考になる情報ありがとうございます。
IEの場合でもinsertAdjacentHTMLメソッドを使いappendと同様の動きを実現する事が出来ました。
> この場合はimportNodeやadoptNodeなどを利用する方が良さそうです。
こちらも参考にさせて頂きます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- その他(プログラミング・Web制作) Pythonで会員サイトの自動ログイン ID Nameがない 1 2022/12/16 02:09
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- その他(プログラミング・Web制作) seleniumbasic chrome操作について 1 2023/03/29 15:40
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのシート上に別のシー...
-
デスクトップ画面を4分割するには
-
Javascript_submit()完了後に処...
-
子ウィンドウの「閉じる(×)」...
-
助けてGmailでボタン表示が消え...
-
VBAで任意のウインドウのサイズ...
-
window.onloadの実行と抑止の分...
-
window.Openをモーダルにできま...
-
子→親ウインドウへデータを受け...
-
ポップアップと作業ウィンドウ...
-
親ウィンドウのメッセージを子...
-
VBの画面で、全ウィンドウを一...
-
<EXCEL/VBA> OUTLOOKのウインド...
-
ウェブサイトを見ていて左側に...
-
マイページはどこを開くの
-
デジタル時計の時刻合わせの方...
-
ウインドウを毎回同じ位置、大...
-
スクリプトって、何ですか?ど...
-
5ちゃんねる
-
別フォームから戻ったときのイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのシート上に別のシー...
-
Javascript_submit()完了後に処...
-
デスクトップ画面を4分割するには
-
VBAで任意のウインドウのサイズ...
-
ウィンドウの2重起動を防止したい
-
VBの画面で、全ウィンドウを一...
-
<EXCEL/VBA> OUTLOOKのウインド...
-
ウィンドウ名からウィンドウオ...
-
ポップアップと作業ウィンドウ...
-
1クリックでモーダルを開いてか...
-
子ウィンドウの存在確認
-
window.Openをモーダルにできま...
-
子ウィンドウから親ウィンドウ...
-
親ウィンドウから開いた子ウィ...
-
JavaScriptで指定Windowを最大...
-
助けてGmailでボタン表示が消え...
-
JavaScriptでPDFを新規ウィンド...
-
初心者javascript グーグルクロ...
-
子ウィンドウより親ウィンドウ...
-
インタネットからPDFファイルだ...
おすすめ情報
contactInnerArea.appendChild(messageElement[0]);
こちらにtry~catchを入れてみたところ「HierarchyRequestError」が出ておりました。IEのセキュリティエラーでしょうか。
同じような事象が発生している方がいらっしゃるようです。
http://stackoverflow.com/questions/23071968/jque …
[parent.htmlの一部]
function openChat(userId, userName) {
var url = "./child.html";
targetWindow = window.open(url, "chatWindow", "");
}
function sendMessage() {
var message = $("#inputMessage").val();
var messageElement = $("<div>" + message + "</div>");
var contactInnerArea = targetWindow.document
.getElementById('contactInnerArea');
contactInnerArea.appendChild(messageElement[0]);
}
[child.html]
<!DOCTYPE html>
<html>
<head>
<title>子ウィンドウ</title>
<meta charset="UTF-8">
</head>
<body>
<div id="contactInnerArea">aaaaa</div>
</body>
</html>
innerHTMLを使えば出来るようですが、
要素の追加的な動きをどのようにするかが不明です。
innerHTMLを使ってappendと同様の動きをする書き方が分かる方いらっしゃったらご教授頂ければ助かります。