- 締切済み
windowオブジェクトを引数で送りたい
連続ですみません、表題の件についてご教授をお願いします。 window.openで別ウィンドゥを開いていますが、 この時返ってくるwindowオブジェクトを 別の関数で使用したいのですが引き渡しができません。 やりたい事は下記のようなイメージですが、オブジェクトエラーが発生します。 winname = window.open("test.html", "win"); functest(winname); function functest(winnameF){ alert(winnameF.name); } 引渡しの方法がありましたらご指導いただけませんでしょうか。 よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- ittochan
- ベストアンサー率64% (2667/4137)
ローカル変数ってのは functionから抜けた時点で無くなる運命ですから、 引き渡そうにもできないでしょう。 >setTimeout("functest(" + winname + ")",1000); で、これは変数を定数にしてるから実現できちゃうんです。 >winnameをグローバル変数にする事は残念ながらできません。 ヽ(+▽+)ノ 別の方法を考えたほうがいいと思いますよ。
- ittochan
- ベストアンサー率64% (2667/4137)
var winname; function ittochan(){ winname = window.open("test.html", "win"); setTimeout("functest(winname)",1000); } function functest(winnameF){ alert(winnameF.name); } こういうふうに winnameをグローパルにしちゃ駄目なの?
補足
再々のアドバイスありがとうございます。 ご指摘の通り、winnameがローカル変数でさらに下記のように winnameの名前自体を修正(?)しているので、連携がうまくいっていないようです。 function getlist(namae,url){ winname = namae; winname = window.open(url, "win"); setTimeout("functest(winname)",1000); } 擬似マルチスレッドにしたいので、winnameをグローバル変数にする事は残念ながらできません。 実現方法に行き詰まって途方に暮れています(;_;)
- ittochan
- ベストアンサー率64% (2667/4137)
あっ、もしかして winname て ローカル変数なの? ちなみに >setTimeout("functest(" + winname + ")",1000); この場合、 winname のタイプは、 文字列とか数値じゃなきゃうまくいかないとおもいますよ。
- ittochan
- ベストアンサー率64% (2667/4137)
それでもうまく動きましたよ win って出ました。 InternetExplorerのバージョンによるのかなぁ (・ε・?
- ittochan
- ベストアンサー率64% (2667/4137)
そのスクリプト InternetExplorer6では うまく動きましたよ。
補足
アドバイスありがとうございます。当方の勘違いでした。 setTimeoutと組み合わせた時のみのエラーでした。 winname = window.open("test.html", "win"); setTimeout("functest(winname)",1000); ←ここ function functest(winnameF){ alert(winnameF.name); } とした時にwinnameの「宣言されていない」エラーが出ます。そのため setTimeout("functest(" + winname + ")",1000); とするとfunctest()で「'object'は宣言されていません」のエラーになってしまいます。 素直にオブジェクトの形のまま、functestに引渡したいのです。 引き続きご指導をお願いします。
お礼
ご指示ありがとうございます。その後悪戦苦闘した結果、 考え方を変更して、グローバルな連想配列で対応する事にしました。 ローカル変数をキーとする形で、なんとか目的の機能は果たせたと思います。 細やかなご指導ありがとうございました。 #でも、文字列も数値も引き渡せるのに、OBJECTだけは変数ごとじゃないと引き渡せないって (プログラムとしては)当たり前なのでしょうが、心境として納得がいかない~(苦笑)