Sync all

Webエンジニアの気になる事。困った事もろもろ。

ポップアップウィンドウ展開時にPOST通信でデータを送信する

JavaScriptで新たにポップアップウィンドウを作成し、通常はGET通信で新たにページを取得するのですが、展開時に多くのデータを送信出来ないデメリットがあります。

なので展開時にPOST通信で処理してみました。

ポップアップウィンドウのPOST通信

1.まずabout:blunkで開く

まずはポップアップウィンドウを空で開きます。

//空のポップアップウィンドウの作成。
exportWin = windowPostOpen("", "popup", false, true, false);

//ウィンドウ作成
function windowPostOpen(url, title, toolbar, scrollbar, fullscreen){
    var option = "location=no, directories=no, status=yes";
    if (scrollbar == true) {
        option = option + ", scrollbars=yes";
    } else {
        option = option + ", scrollbars=no";
    }
    var width = screen.availWidth;
    var height = screen.availHeight;
    if (width > 1024) width = 1024;
    if (height > 768) height = 768;
    var left = (screen.availWidth - width) / 2;
    var top = (screen.availHeight - height) / 2;
    if (toolbar == true) {
        option = option + ", toolbar=yes, menubar=yes, resizable=yes";
        option = option + ", width=" + (width-8) + ", height=" + (height-58-78) + ", left=" + left + ", top=" + top;
    } else {
        option = option + ", toolbar=no, menubar=no, resizable=yes";
        option = option + ", width=" + (width-8) + ", height=" + (height-58) + ", left=" + left + ", top=" + top;
    }

    return window.open(url, title, option);
}

2.formを作成作成

//form作成
var form = document.createElement("form");
//target属性は、どこにアクションURLを開くかを指定します。
form.target = "popup";
//POST通信設定。
form.method = 'post';
//遷移先のaction設定。
form.action = '/action.php';

3.input要素を作成し送信データを設定

POSTで通信するためにtype="hidden"にデータ設定。

//input type='hidden' を作成し、送信データを設定。
var submitType = document.createElement("input");
submitType.setAttribute("name", "hoge");
submitType.setAttribute("type", "hidden");
submitType.setAttribute("value", "送信データ");

//form に作成したinput要素を追加。
form.appendChild(submitType);
var body = document.getElementsByTagName("body")[0];

4.フォームの送信

一旦DOMに追加しないと送信出来ないので送信時のみ追加し送信後に削除。

var body = document.getElementsByTagName("body")[0];

//一旦domに書き出して
body.appendChild(form);
//送信!
form.submit();
//送信後に作成したform要素の削除
body.removeChild(form);

▼▼▼▼▼▼▼▼▼▼以下全ソース▼▼▼▼▼▼▼▼▼▼

//空のポップアップウィンドウの作成。
exportWin = windowPostOpen("", "popup", false, true, false);

//form作成
var form = document.createElement("form");
//target属性は、どこにアクションURLを開くかを指定します。
form.target = "popup";
//POST通信設定。
form.method = 'post';
//遷移先のaction設定。
form.action = '/action.php';

//input type='hidden' を作成し、送信データを設定。
var submitType = document.createElement("input");
submitType.setAttribute("name", "hoge");
submitType.setAttribute("type", "hidden");
submitType.setAttribute("value", ”送信データ”);

//form に作成したinput要素を追加。
form.appendChild(submitType);
var body = document.getElementsByTagName("body")[0];

//一旦domに書き出して
body.appendChild(form);
//送信!
form.submit();
//送信後に作成したform要素の削除
body.removeChild(form);

//ウィンドウ作成
function windowPostOpen(url, title, toolbar, scrollbar, fullscreen){
    var option = "location=no, directories=no, status=yes";
    if (scrollbar == true) {
        option = option + ", scrollbars=yes";
    } else {
        option = option + ", scrollbars=no";
    }
    var width = screen.availWidth;
    var height = screen.availHeight;
    if (width > 1024) width = 1024;
    if (height > 768) height = 768;
    var left = (screen.availWidth - width) / 2;
    var top = (screen.availHeight - height) / 2;
    if (toolbar == true) {
        option = option + ", toolbar=yes, menubar=yes, resizable=yes";
        option = option + ", width=" + (width-8) + ", height=" + (height-58-78) + ", left=" + left + ", top=" + top;
    } else {
        option = option + ", toolbar=no, menubar=no, resizable=yes";
        option = option + ", width=" + (width-8) + ", height=" + (height-58) + ", left=" + left + ", top=" + top;
    }

    return window.open(url, title, option);
}