Save Form State

  • /*
     * @title Save Form State
     * @description 実行すると開いているページのフォームの入力状態を復元するブックマークレットを生成します
     * @include http://*
     * @license MIT License
     * @require jquery
     * @require https://raw.github.com/kflorence/jquery-deserialize/master/dist/jquery.deserialize.min.js
     */
    
    
    var data = [];
    $('form').each(function () {
    	var $this = $(this);
    	data.push($this.serializeArray().filter(function (i) {
    		return $this.find('[name="' + i.name + '"]').attr('type') != 'hidden';
    	}));
    });
    
    function bookmarklet (data) {
    	(function load (scripts, callback) {
    		var script = document.createElement('script');
    		script.type = 'text/javascript';
    		script.charset = 'utf-8';
    		script.onload = function () { scripts.length ? load(scripts, callback) : callback() };
    		script.src = scripts.shift();
    		document.body.appendChild(script);
    	})(["http://code.jquery.com/jquery-1.4.2.min.js","https://raw.github.com/kflorence/jquery-deserialize/master/dist/jquery.deserialize.min.js"], function() {
    		$('form').each(function () {
    			console.log('deserialize', this);
    			$(this).deserialize(data.shift());
    		});
    	});
    }
    
    var href = 'javascript:' + encodeURIComponent('(' + bookmarklet.toString() + ')(' + JSON.stringify(data) + ')');
    
    $('<a/>').attr('href', href).text('Restore Form').prependTo(document.body);
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2014/01/24 11:46:31 - 2014-01-24