ユーザ定義オブジェクトの別ウィンドウへの引継ぎ
以下のようなユーザ定義オブジェクトがあるとする。
messageobject.js
function MessageObject(message) { this.message = message; } MessageObject.prototype.getMessage = function () { return this.message; }
IEで、このユーザ定義オブジェクトをwindow.openで開いた別ウィンドウから元ウィンドウに渡せるかどうか検証した。
open.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title>open</title> <script type="text/javascript" src="messageobject.js"></script> <script type="text/javascript"> <!-- var messageObject = new MessageObject(''); // --> </script> </head> <body> <h1>window.open</h1> <form name="testForm"> <input type="submit" value="open" onclick="window.open('window.html'); return false;"> <input type="submit" value="message" onclick="alert(window.messageObject.message); return false;"> <input type="submit" value="getMessage" onclick="alert(window.messageObject.getMessage()); return false;"> </form> </body> </html>
window.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title>window</title> <script type="text/javascript" src="messageobject.js"></script> <script type="text/javascript"> <!-- function set() { window.opener.messageObject = new MessageObject(document.testForm.inputField.value); } // --> </script> </head> <body> <h1>window</h1> <form name="testForm"> <input type="text" name="inputField" value=""> <input type="submit" value="set" onclick="set(); return false;"> <input type="submit" value="message" onclick="alert(window.opener.messageObject.message); return false;"> <input type="submit" value="getMessage" onclick="alert(window.opener.messageObject.getMessage()); return false;"> <input type="submit" value="close" onclick="window.close(); return false;"> </form> </body> </html>
open.htmlを開き、openボタンを押す。子ウィンドウの入力欄に適当に入力し、setボタンを押す。その後、各ウィンドウのmessageボタン、getMessageボタンを押して、ユーザ定義オブジェクトのプロパティおよびメソッドをコールしてみると、正しく入力値を返していた。この段階では、親、子ウィンドウともにユーザ定義オブジェクトを扱える。
続いて、子ウィンドウのcloseボタンを押して、親ウィンドウのmessageボタン、getMessageボタンを押して、ユーザ定義オブジェクトのプロパティおよびメソッドをコールしてみると、
エラー:呼び出し先(サーバー アプリケーションではなく、サーバー)は消失し、利用できませ ん。すべての接続は無効です。呼び出しは実行されていません。
こんなエラーがでてしまった。ウィンドウを閉じることによって、オブジェクトの実体も破棄されてしまうのだろうか。