前回エントリの子ウィンドウを閉じる制御などを組み込みたい場合にどうすればよいか。
frameは使いたくないので、色々試行錯誤した結果とりあえずiframeとcssで頑張ることで解決。
ブラウザのbodyいっぱいにiframeを広げて、iframeのリクエストでファイルをダウンロード。
ダウンロードをGETで行わなければならないが、今回はPRGパターンのPOSTでファイル操作してGETでダウンロードという作りなのでOK
function writeOpenWin(win, requestPath) {
// header各種生成
var docType = 'xxx'; //xhtml定義など
var htmlTagStart = 'xxx'; // htmlタグ namespaceスペースなど
var contentTypeCharset = '<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />';
var contentTypeJs = '<meta http-equiv="Content-Script-Type" content="text/javascript" />';
var contentTypeCss = '<meta http-equiv="Content-Style-Type" content="text/css" />';
// スタイル生成
var wincss = '<style type="text/css">';
wincss += 'html,body{';
wincss += 'height:100%;';
wincss += 'margin:0px;';
wincss += 'padding:0px;';
wincss += 'overflow: hidden;';
wincss += '}';
wincss += '</style>';
// javascript生成
var winJs = '<script type="text/javascript">';
winJs += "function hogeFunc(){ alert("xxx"); }"; // onloadに登録する処理など
winJs += '</script>';
// ドキュメント書き込み
win.document.open();
win.document.write(docType);
win.document.write(htmlTagStart);
win.document.write('<head>');
win.document.write('<title>' + dlFileName + '</title>');
win.document.write(contentTypeCharset + contentTypeJs + contentTypeCss);
win.document.write(wincss + winJs);
win.document.write('</head>');
win.document.write('<body onload="hogeFunc();" >');
win.document.write('<iframe src="'+ requestPath + '" width="100%" height="100%" scrolling="auto" name="side" frameborder="0" allowtransparency="true"></iframe>');
win.document.write('</body>');
win.document.write('<html>');
win.document.close();
}
使用例
// requestPath生成処理など
・・・
var win = window.open("../dummy.htm" ,"winname", "width=800,height=600");
writeOpenWin(win, requestPath);
・・・
※IE6,7しか確認してないす
0 件のコメント:
コメントを投稿