Muestra un cuadro de diálogo modal con los parámetros especificados:
//------------------------------------------------------------------------------------------------
// Engines JavaScript 1.4+
// JScript 5.5+
// Environments NN6+ IE5.5+ MOZILLA1+ SAFARI1+
//------------------------------------------------------------------------------------------------
function getModalDlg
(
s // url
, c // callback
, w // width
, h // height
, x // left
, y // top
){
if (s == null || (s += '').length < 1 || !/^((ht|f)tp(s)*\:\/\/)*\S+$/.test(s))
throw new Error('getModalDlg: Invalid Url! "' + s + '"');
if (typeof c != 'function')
throw new Error('getModalDlg: Invalid callback function!');
var a = Array.prototype.slice.call(arguments, 2);
var b = a.length < 3;
var f = ['width', 'height', 'left', 'top'];
w = window;
var p = w.showModalDialog;
var d = p ? [':', 'px;'] : ['=', ','];
var u = 'undefined';
var m = typeof netscape != u;
var n = navigator.userAgent;
for (var i = 0; i < a.length; ++i)
a[i] = (p ? 'dialog' : '') + f[i] + d[0] + a[i] + d[1];
f = a.join('');
if (p)
{
f += 'center:' + (b ? '1' : '0') + ';scroll:1;';
f += n.indexOf('MSIE') + 1 ? 'status:0' : 'resizable:0';
s = p(s, null, f);
c(typeof s.returnValue != u ? s.returnValue : s);
}
else
{
w.dlgcallback = c;
f += 'dialog,scrollbars,chrome,modal=yes,location=0,status=0,toolbar=no';
if (b)
f += ',centerscreen';
if (m && (m = netscape.security.PrivilegeManager))
{
try
{
m.enablePrivilege(d = 'UniversalBrowserWrite');
w.open(s, '_blank', f);
m.disablePrivilege(d);
return;
}
catch (e) {}
}
if (typeof w.__dlg == u || w.__dlg.closed)
{
w.__dlg = w.open(s, '_blank', f);
try
{
w.onfocus = function ()
{
if (typeof this.__dlg != u && !this.__dlg.closed)
{
this.blur();
this.__dlg.focus();
}
else delete this.onfocus;
}
w.__dlg.onblur = function ()
{
this.opener.blur();
this.focus();
}
}
catch (e)
{
c = { callback: c, dialog: w.__dlg};
c.id = setInterval
(
function (o)
{
var s = 'returnValue';
if (typeof o.dialog[s] != 'undefined')
{
o.callback(o.dialog[s]);
clearInterval(o.id);
}
}
, 0
, c
);
}
}
else if (typeof w.__dlg != u)
w.__dlg.focus();
}
}
Uso:
getModalDlg('my-url', function (returnValue) { /* TODO... */ }, 320, 240);
Código a insertar en la página del cuadro de diálogo:
function setDlgReturnValue (v /* value */)
{
var s = 'returnValue';
var w = window;
if (w.showModalDialog || !w.opener || !w.opener.dlgcallback)
w[s] = v;
else w.opener.dlgcallback(v);
}
Uso:
setDlgReturnValue('my-value');
window.close();
No hay comentarios:
Publicar un comentario