artDialog( http://www.planeart.cn/demo/artDialog/_doc/API.html)

 

  1. 如果顶层面引用了artDialog,对话框会穿越出框架在父页面弹出
  2. chrome浏览器本地运行会有安全限制,请在服务器上查看本页面
  3. artDialog只能运行在W3C标准页面下,需要页面有声明<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">或者<!DOCTYPE HTML>(jQuery版本则无此限制)

获取artDialog可用顶层页面window对象[parent]

art.dialog.parent方法可以理解为widnow.top,但art.dialog.parent已经排除了框架集、跨域、artDialog对象不存在的情况,最终给出一个安全可用的window对象,这里页面所有穿越的对话框最终是在这个window上。你可以用此作为前缀去操作对话框穿越框架后所在页面的对象

var win = art.dialog.parent;
win.document.title = '我修改了页面标题';
win.document.getElementById('testInput').value = 'hello world!';

可穿越框架的标准对话框[through]

不鼓励直接使用window.top这样的方式穿越,这样可能因为对话框触发页面重置导致其产生所有的对象在内存中被清空,而让对话框无法关闭,所以你应该用这个安全的方法创建自定义对话框。

var throughBox = art.dialog.through;
throughBox({
    content: '我是一个普通的对话框,只是能穿越框架而已',
    lock: true
});

嵌入网页[open]

同域下能够自适应iframe大小,但chrome 浏览器本地运行会认为跨域而无法适应大小

open方法有如下这几个私有个功能

名称 类型 描述
iframe内部静态方法
art.dialog.open.api Object 从iframe页面引用对话框控制接口
art.dialog.open.origin object Window 从iframe页面引用对话框触发页面的window
控制接口
iframe HTMLElement 引用open创建的iframe(4.0.1新增)

其他控制接口:API.html#API

一、使用iframe内部脚本控制对话框

请打开 login_iframe.html查看源码

art.dialog.open('login_iframe.html', {title: '提示'});

二、在外部对iframe进行控制

对iframe控制需要用到open私有的this.iframe控制接口:

art.dialog.open('login_iframe_2.html', {
    title: '登录',
    // 在open()方法中,initFn会等待iframe加载完毕后执行
    initFn: function () {
    	var iframe = this.iframe.contentWindow;
    	var parent = art.dialog.parent;// 引用顶层页面window对象
        var username = iframe.document.getElementById('login-form-username');
        username.value = 'guest';
        setTimeout(function () {
        	username.select();
        }, 80);
        parent.document.title = '测试';
    },
    yesFn: function () {
    	var iframe = this.iframe.contentWindow;
    	if (!iframe.document.body) {
        	alert('iframe还没加载完毕呢')
        	return false;
        };
    	var form = iframe.document.getElementById('login-form'),
            username = iframe.document.getElementById('login-form-username'),
    		password = iframe.document.getElementById('login-form-password');
        if (check(username) && check(password)) form.submit();
       	return false;
    },
    noFn: true
});

// 表单验证
var check = function (input) {
    if (input.value === '') {
        inputError(input);
        input.focus();
        return false;
    } else {
        return true;
    };
};

// 输入错误提示
var inputError = function (input) {
    clearTimeout(inputError.timer);
    var num = 0;
    var fn = function () {
        inputError.timer = setTimeout(function () {
            input.className = input.className === '' ? 'login-form-error' : '';
            if (num === 5) {
                input.className === '';
            } else {
                fn(num ++);
            };
        }, 150);
    };
    fn();
};

三、跨域访问

跨域访问无法自适应大小,也无法进行父页面与子页面数据交换

art.dialog.open('http://zhihu.com/', {title: '知乎', width: 860, height: 500});

框架与框架、主页面数据共享[data & removeData]

框架与框架之间以及与主页面之间进行数据交换是非常头疼的事情,常规情况下你必须知道框架的名称才能进行数据交换,如果是在复杂的多层框架下操作简直就是开发人员噩梦,而这样的问题在CMS多框架应用中十分常见。

在artDialog中这一切完全被简化,它有一个简单易用的数据共享接口,可以共享任意类型的数据供各个框架页面读取,它与页面名称、层级毫无关系。相关原理

请打开 iframeA.html源码查看范例。由于art.dialog.open方法打开的iframe加剧了框架的层级的复杂性,所以请特别重视这个data方法!

art.dialog.data('test', document.getElementById('demoInput04-3').value);
art.dialog.open('iframeA.html', null, false);

// 此时 iframeA.html 页面可以使用 art.dialog.data('test') 获取到数据,如:
// document.getElementById('aInput').value = art.dialog.data('test');

(请输入测试文字)

Ajax[load]

特别说明:第三个参数为ajax缓存开关,默认为true。由于浏览器限制,ajax需要在服务端运行才能正确运行本例子。

一、加载网页片段
art.dialog.load('./ajaxContent/content.html', {
    title: '远程载入HTML片段',
    yesFn: function(topWin){
    	art.dialog('hello world');
    },
    closeFn: function(){
    	art.dialog.tips('close')
    }
}, false);

art.dialog.load('./ajaxContent/login.html', false);

二、加载JSON结合模板生成结构

特别说明:这里是用JSON数据+模板引擎拼接HTML代码,推荐此代替常规的iframe拼接页面,它比iframe快多了

art.dialog.load('./ajaxContent/content.json', {
    title: '使用JSON拼接模板',
    tmpl: '\
    <% if (code === 0) { %>\
        <p>当前用户:<a href="<%=web%>" title="<%=web%>"><%=me%></a></p>\
        <p>\
            所有用户:\
            <% for (i = 0; i < users.length; i++) { %>\
                <%=i + 1%>.<%=users[i]%> \
            <% } %>\
        </p>\
    <% } else { %>\
    	<p>哦,服务器出错了,错误代码:<%=code%><p>\
    <% } %>\
    '
}, true);

警告消息[alert]

art.dialog.alert('警察叔叔会请你喝茶!');

确认消息[confirm]

art.dialog.confirm('你确认删除操作?', function(){
var parent = art.dialog.parent,
    input = document.getElementById('demoInput02'),
    photo = parent.document.getElementById('photo');
    
if (input) input.parentNode.removeChild(input);
if (photo) photo.innerHTML = '<img src="images/lixiaolong.png" />';
}, function(){
    art.dialog.tips('你取消了操作');
});

提问消息[prompt]

特别说明:回调函数第一个参数为输入的值

art.dialog.prompt('你的名字是什么?', function(data){
    // data 代表输入数据;
    var input = document.getElementById('demoInput03'),
        topVal = art.dialog.parent.document.getElementById('testInput');
    if (input) input.value = data;
    if (topVal) topVal.value = data;
}, '我是糖饼');

提示消息[tips]

art.dialog.tips('提交成功!', 1.5);

 

http://www.planeart.cn/demo/artDialog/index.html

[更新列表] ------------------------------------------------------------------------------------------------ v2.1.1 1、修复IE6静止定位的对话框导致页面变长的问题 v2.1.0 1、 增加menuBtn参数, 支持让对话框在指定元素附近弹出(菜单模式) 2、 剔除鸡肋参数'parent',框架相互调用请用javascript原生方法 3、 剔除对话框关闭后回调函数,如果需要使用请使用内置扩展方法 4、 如果有取消按钮回调函数,那关闭按钮的回调函数也将与其相同 5、 增加当出现多个对话框时让顶层的与众不同的特性 6、 让Esc键关闭最高层对话框 7、 锁屏的时候改用js屏蔽页面滚动功能,取消原来CSS隐藏滚动条,防止页面偏移 8、 给确定按钮增加Ctrl + Enter快捷键,锁屏的时候支持tab与方向键切换按钮焦点 9、 锁屏的时候屏蔽了键盘操作刷新、Tab切换(只在对话框中可用)与全选 10、修复Chrome特定情况下出现的iframe错位问题 11、修正2.0.8版本后锁屏不兼容Safari的问题 12、修复Firefox调大对话框拖帧的现象 13、修复拖动对话框时候可能因鼠标置入iframe窗口而导致鼠标被粘住的问题 14、修复了内部$.newId方法的一处错误,特定情况下导致定义了ID的对话框无法弹出 15、删除脚本对IE6 png bug内置支持,之前测试版本自动修复ie6 png皮肤是因为作者偷懒 16、修改aero皮肤CSS、针对IE6单独兼容,减少之前脚本修复png占用过多的客户端资源 17、默认皮肤改为前版的mini,没有使用任何背景图片,完全用css表现 18、修复一处隐秘BUG:当使用Ctrl+回车提交表单并弹出对话框时导致弹出新窗口 (因为此时焦点在对话框关闭链接上,这个快捷键让很多浏览器新建窗口) 19、重新绘制'earo'皮肤,修复毛边的问题 20、修复拖动的时候出现选中文本的现象(自动清除选择) 21、如果对话框高度超过浏览器视口的一半高度则不使用黄金比例垂直居中 22、修复了IE7通过url参数创建的iframe可能出现边框线的小问题 23、为了后续版能够提更多接口(小巧而强大的),想了很久狠心改了调用名:art.dialog(); 24、既然连入口都改了,那再改下配置名(为了后续可能的拓展): 'url'参数名改为'iframe' 25、可以自适应iframe内容的大小(不跨域的前提下) 26、对超过预设面积大小的对话框拖动自动采用替身的方式,以求拖动更流畅 27、新增加一个'data'的接口,它保存了你对话框每次创建的消息对象 (操作iframe消息将更加方便,如提交iframe表单。稍后添加更多的例子..) 28、对于简单的消息可以使用简写: artDialog('hello world') 29、让IE6支持覆盖下拉控件的同时也支持透明皮肤 30、优化锁屏渐变动画 31、修复范围限制函数没有生效的错误 32、修复一处笔误,忘记声明变量导致泄漏出去污染全局 v2.0.9 1、 优化代码结构,弹出后仍可访问内部方法(如关闭),大大增强了灵活性 2、 修正IE7锁屏的时候滚动条没有禁止的问题 3、 让焦点自动附加到确定按钮或者关闭按钮 v2.0.8 1、 修正超大对话框并使用定位时候可能被截取的BUG 2、 修复Opera无法正确处理对话框叠加高度(z-index)的BUG 3、 修复Opera设置坐标时候出现的变形BUG v2.0.7 1、 url参数加载外部页面的时候显示loading动画 2、 预加载皮肤背景图片 3、 优化拖动 v2.0.6 1、 解决页面载入即弹出的情况造成水平对齐不正常的BUG(主要是dom ready事件 绑定) 2、 增加parent参数,支持对话框穿越框架在父页面弹出 v2.0.5 1、 剔除yesClose参数,如果要点击确定或者取消按钮不自动关闭对话框,让回调 函数返回false即可 2、 更改x参数名为left,y为top,为后续版本拓展right与bottom参数需要 3、 修改皮肤aero和chrome的图标布局,让回行消息文本留出图标的宽度 v2.0.4 1、 修改一小处兼容框架样式,防止调用页面body设置了文本对齐导致对话框标题文 本也居中 v2.0.3 1、 增加id参数,可以方便外部脚本控制整个对话框,同时可防止对话框重复弹出 2、 增加yesClose参数,用于阻止对话框点击确定后自动关闭 v2.0.0 ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值