@RikuMoto (Riku Moto)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

IEからEdge対応 showModalDialogからwindow.openへ

IEからEdge対応

現在、IEでwindow.showModalDialogを使用しているのですが、Edgeだとサポートされていないのでwindow.openに大替しようとしています。
そこで困ったことがありまして...
親ウィンドウから子ウィンドウに値が取得できません。

親ウィンドウ↓(window.showModalDialog使っていたとき)

 var params = new Array();
 params['opener'] = this;
 params['hoge'] = 1;
 params['hage'] = "mm2";

  var returnValue = window.showModalDialog("URL", params, "dialogWidth=20px; dialogHeight=30px;");

子ウィンドウ↓(window.dialogArguments使っていたとき)もちろんこちら値取得できる。

$(function(){
   if(window.dialogArguments['opener']!=null)opener = window.dialogArguments['opener'];
   if(window.dialogArguments['hoge']!=null)hoge = window.dialogArguments['hoge'];
   if(window.dialogArguments['hage']!=null)hage = window.dialogArguments['hage'];
});

親ウィンドウ↓(window.openに代用)Edge対応

var params = new Array();
 params['opener'] = this;
 params['hoge'] = 1;
 params['hage'] = "mm2";

  var returnValue = window.open("URL", params, "Width=20px; Height=30px;");

こちら問題?
子ウィンドウ↓(window.opener.documentに代用)Edge対応

$(function(){
   if(window.opener.document['opener']!=null)opener = window.opener.document['opener'];
   if(window.opener.document['hoge']!=null)hoge = window.opener.document['hoge'];
   if(window.opener.document['hage']!=null)frmid = window.opener.document['hage'];
});

になります。
おそらくwindow.opener.document['opener']は取得できてそうなんですが
hoge,hageはundfinedになります。

すみませんが宜しくお願い致します。

0 likes

2Answer

window.showModalDialogなんてグローバル関数があることを初めて知ったものです。
直接的な回答ではありませんが、下記のarrayをオブジェクトのように扱ってるのがどうにも気になって仕方ありません.. 普通にオブジェクトで渡してはダメなんでしょうか?

var params = new Array();
 params['opener'] = this;
 params['hoge'] = 1;
 params['hage'] = "mm2";
1Like

Comments

  1. @RikuMoto

    Questioner

    だいぶ前に開発されたものなので正直ちんぷんかんです笑
    オブジェクトで渡しても大丈夫だと思います←キーバリューの形になっていればいいとは思うんですが。会社でしか試せないので今お返事ができません。ご了承ください。
    もし普通のオブジェクトで渡した場合どのような記述で渡せば宜しいですか?追加質問すみません。
  2. そうですね、APIの引数がObjectを要求しているならArrayではなくObjectを渡してやらなきゃいけませんし、根本的にこんなArrayの使い方で動くの!?っていう感想を持ちました。

    オブジェクトを作るなら単純に

    var params = {key: val, foo: bar}

    ですが、

    window.openのAPIを調べてみたら

    var window = window.open(url, windowName, [windowFeatures]);

    だったので、そもそも引数の渡し方が合ってない気がしました。

    https://developer.mozilla.org/ja/docs/Web/API/Window/open
  3. @RikuMoto

    Questioner

    やっぱりか...
    一つしか引数渡せてない感があってでもどうやって渡せばいいんだ...とか模索していました...笑
    もし実装するなら
    params = {opener: this, hoge: 1, hage: mm2}
    を第二引数に持ってくる感じでしょうか。
  4. さらに追記
    window.openの第二引数は文字列かnullっぽいです。
    先程の引用はそういうこと(オブジェクトではないとうこと)を伝えたい意図でした。

    > var window = window.open(url, windowName, [windowFeatures]);
  5. @RikuMoto

    Questioner

    あまり理解する意欲持たない気持ちすごいわかります笑

    明日仕事どうしよ..
    どうやって渡せばいいんだ〜〜〜
  6. @RikuMoto

    Questioner

    もしこのようなモーダルの実装があった場合みんなどうしてるんだろ
    そもそもwindow.open使ってないのかな
  7. @RikuMoto

    Questioner

    リンクありがとうございます。
    回答参考になりました。ありがとうございます!
  8. @RikuMoto

    Questioner

    json形式で値を渡してもだめですね...なんでだろ
    ```
    var callback_id = 'callback_1'; //適当にIDをふる
    window[callback_id] = function(json) { //windowにコールバックを登録
    params['opener'] = json.opener;
    params['hage'] = json.hage;
    params['hoge'] = json.hoge;

    }
    ```

もしこのようなモーダルの実装があった場合みんなどうしてるんだろ

メジャーなブラウザであればdialogタグに対応しているので、モーダルにこだわるのであれば利用してみてはいかがでしょうか?

0Like

Your answer might help someone💌