カテゴリ: 未分類 - ページ 12

PHPで画面推移なしでファイルをアップロードしてその情報を親ウィンドウの変数に代入する

そ、そんなことが可能なのか・・・!と自分でもびっくりですが、できました。仕組みは簡単でした。

Javascript

function uploadFile() {
    $("#form").submit();    //jQuery
    return false;
}

window.hoge = [];
<form id="form" action="/upload" method="post" enctype="multipart/form-data" target="iframe">
<input name="upload" type="file" onchange="uploadFile();">
</form>
<iframe name="iframe"></iframe>Code language: JavaScript (javascript)

PHP側

$upload_dir = "/www/var/html/public/";    //ディレクトリはあらかじめ作っておく。Windowsの場合C:\\から
move_uploaded_file($_FILES['upload']['tmp_name'], $upload_dir . $_FILES['upload']['name']);
chmod($upload_dir . $_FILES['upload']['name'], 0666);
parent.window.formdata[0] = "<?php print($_FILES['upload']['name']); ?>";Code language: PHP (php)

テストはしてないので間違いがあるかもしれません。window.formdataのプロパティとしてグローバル配列変数を作成し、その結果を代入します。ただ、セキュリティの観点からなのかイベントの発火は何度やってもだめでした。親ウィンドウの変数に代入するくらいしかできないようです。

IEとそれ以外のブラウザ両方で動くイベント登録

	//イベント登録
	if(!Object.addEventListener) {
		Object.prototype.addEventListener = function(_type, _func, _dummy) {
				this.attachEvent('on' + _type, _func);
		};
	}

Code language: JavaScript (javascript)

すべてのオブジェクトにaddEventListennerを追加する。jQueryと相性が悪いみたい。

jQuery UI のモーダルダイアログで二番目のボタンにフォーカスを与える方法を調べてみたらなかったので

書いた。

				$("#dialog-modal-1").dialog({
					modal : true,
					autoOpen : false,
					open : function() {
					    var buttonelm = document.getElementById("dialog-modal-1").parentNode.getElementsByTagName("button");
						buttonelm[buttonelm.length-1].focus();
					},
					buttons : {
						戻る : function() {
							$(this).dialog("close");
						},
						次へ : function() {
							$(this).dialog("close");
						}
					},
					focus : 1
				});
Code language: JavaScript (javascript)