名称 描述
核心方法
art.dialog.top 获取artDialog可用最高层window对象。这与直接使用window.top不同,它能排除artDialog对象不存在已经或者顶层页面为框架集的情况
这是iframe应用工具集中的核心方法,你可以用它来操作父页面对象(包括上面的对话框)
art.dialog.data(name, value) 跨框架数据共享写入接口。
框架与框架之间以及与主页面之间进行数据交换是非常头疼的事情,常规情况下你必须知道框架的名称才能进行数据交换,如果是在复杂的多层框架下操作简直就是噩梦。
而data方法就是为了解决这个问题,你完全不用管框架层级问题,它可以写入任何类型的数据,而做到各个页面之间数据共享。
art.dialog.data(name) 跨框架数据共享读取接口。指定name即返回数据,任何引用了artDialog的页面都有效
art.dialog.removeData(name) 跨框架数据共享删除接口。删除指定名称的数据,任何引用了artDialog的页面都有效
异步数据对话框
art.dialog.open(url, options, cache) 创建一个iframe页面
参数: 地址, 配置参数,
缓存开关(默认true)
art.dialog.open.api iframe页面获取open方法扩展方法。
(注意这个iframe中也必须引用artDialog脚本文件)
art.dialog.opener iframe页面获取open方法触发来源页面window对象。
(注意这个iframe中也必须引用artDialog脚本文件)
art.dialog.close() iframe页面关闭open方法创建的对话框的快捷方式。
close方法等同于:

var api = art.dialog.open.api;
api && api.close();

(注意这个iframe中也必须引用artDialog脚本文件)

art.dialog.load(url, options, cache) Ajax加载内容
参数:地址, 配置参数, 缓存开关(默认true)
基础交互对话框
art.dialog.alert(content, callback) 警告消息
(同时只允许一个alert)
参数: 内容, 对话框关闭后的回调函数
art.dialog.confirm(content, ok, cancel) 确认
(同时只允许一个confirm)
参数: 内容, 确定按钮回调函数,
取消按钮回调函数
art.dialog.prompt(content, ok, value) 提问
(同时只允许一个prompt)
参数: 内容, 确定按钮回调函数,
文本框默认值
art.dialog.tips(content, time) 短暂提示(同时只允许一个tips)
参数: 内容、显示时间(单位秒,
默认1.5)
自定义
art.dialog.through(options) 创建一个普通可穿越框架的对话框
不鼓励直接使用window.top这样的方式穿越,这样可能因为对话框触发页面重置导致其创建的对象在内存中被清空而发生异常
  1. 顶层面需要引用了artDialog才能实现穿越框架
  2. chrome浏览器本地运行会有安全限制,请在服务器上查看本页面
  3. artDialog不支持怪异模式,请用主流网站采用的XHTML1.0或者HTML5的DOCTYPE申明,如:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
    Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    或者
    <!DOCTYPE
    HTML>

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

art.dialog.top默认引用的是widnow.top(如果window.top是框架集、跨域、artDialog对象不存,否则可能为window.parent或者当前window)这里页面所有穿越的对话框最终是在这个window上。

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

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

如果iframe刷新或者被关闭,它创建的对话框会自动回收,防止因内存清空而导致错误。不鼓励直接使用window.top.art.dialog()与art.dialog.top.art.dialog()这样的方式穿越框架,它们会带来潜在的错误。

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

嵌入网页[open]

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

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

名称 类型 描述
iframe内部静态方法
art.dialog.open.api Object 从iframe页面引用对话框扩展方法
art.dialog.opener 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()方法中,init会等待iframe加载完毕后执行
init: function () {
var iframe = this.iframe.contentWindow;
var top = art.dialog.top;// 引用顶层页面window对象
var username = iframe.document.getElementById('login-form-username');
username.value = 'guest';
setTimeout(function () {
username.select();
}, 80);
top.document.title = '测试';
},
ok: 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;
},
cancel: 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://www.connect.renren.com/igadget/renren/index.html',
{title: '人人网', width: 320, height: 400});

框架与框架、主页面数据共享[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片段',
ok: function(topWin){
art.dialog('hello world');
},
close: function(){
art.dialog.tips('close')
}
}, false);
art.dialog.load('./ajaxContent/login.html', false);

警告消息[alert]

art.dialog.alert('警察叔叔会请你喝茶!', function () {alert(0)});

确认消息[confirm]

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

提问消息[prompt]

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

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

提示消息[tips]

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

artDialog学习之旅(二)之扩展方法详解的更多相关文章

  1. 开启PHP exif扩展方法详解

    服务器配置说明: 1.在php.ini文件中找到;extension=php_exif.dll,去掉前面的分号2.在php.ini文件中找到;extension=php_mbstring.dll,去掉 ...

  2. ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解

    原文 ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解 在教程的这一部分,我们将研究一下自动生成的 Details 和Delete 方法. Details 方法 打开M ...

  3. MP实战系列(十二)之封装方法详解(续二)

    继续MP实战系列(十一)之封装方法详解(续一)这篇文章之后. 此次要讲的是关于查询. 查询是用的比较多的,查询很重要,好的查询,加上索引如鱼得水,不好的查询加再多索引也是无济于事. 1.selectB ...

  4. C#中的扩展方法详解

    “扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.”这是msdn上说的,也就是你可以对String,Int,DataRow,DataTable等这些类 ...

  5. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  6. 【精选】Nginx模块Lua-Nginx-Module学习笔记(二)Lua指令详解(Directives)

    源码地址:https://github.com/Tinywan/Lua-Nginx-Redis Nginx与Lua编写脚本的基本构建块是指令. 指令用于指定何时运行用户Lua代码以及如何使用结果. 下 ...

  7. 【官方文档】Nginx模块Nginx-Rtmp-Module学习笔记(二)HLS 指令详解

    源码地址:https://github.com/Tinywan/PHP_Experience 一.在Nginx配置文件的RTMP模块中配置hls hls_key_path /tmp/hlskeys; ...

  8. Nginx模块Lua-Nginx-Module学习笔记(二)Lua指令详解(Directives)

    源码地址:https://github.com/Tinywan/Lua-Nginx-Redis Nginx与Lua编写脚本的基本构建块是指令. 指令用于指定何时运行用户Lua代码以及如何使用结果. 下 ...

  9. Linux学习之CentOS(二十一)--Linux系统启动详解

      在这篇随笔里面将对Linux系统的启动进行一个详细的解释!我的实验机器是CentOS6.4,当然对于现有的Linux发行版本,其系统的启动基本上都是一样的! 首先我们来看下Linux系统启动的几个 ...

随机推荐

  1. 12.15daily_scrum

    新的阶段工作已经开始,本阶段我们小组的工作重心在于界面的优化和资源配置的整合,让用户产生更好的体验效果,有一些更加直观和便捷的应用功能展示,加以相应的辅助功能让新版本的笔记本软件更具竞争力和可用性. ...

  2. 2-Seventeenth Scrum Meeting-20151217

    任务安排 成员 今日完成 明日任务 闫昊 写完学习进度记录的数据库操作  写完学习进度记录的数据库操作 唐彬 编写与服务器交互的代码  编写与服务器交互的代码 史烨轩 获取视频url   余帆  本地 ...

  3. linux 远程连接报错 10038或者10061 或者10060

    1.检查linux的mysql是否开启 2.检查mysql的user表的host是否是% 3.检查my.cnf文件是否绑定本地 4.防火墙3306端口是否开启 假如以上都没问题,那最大的原因就是我折腾 ...

  4. 项目UML设计(团队)

    团队 队名 boy next door 队员 林晗 124(组长) 微博链接 显东 114 微博链接 基智 505 微博链接 松雄 126 微博链接 团队分工 分工表 任务 林晗 显东 基智 松雄 前 ...

  5. windows32位系统 安装MongoDB

    今天在win7 32位系统下安装 MongoDB 时,遇到了一堆坑,特此笔记. 一.下载MongoDB 打开官网下载地址:https://www.mongodb.com/download-center ...

  6. Python3《机器学习实战》学习笔记(一):k-近邻算法(史诗级干货长文)

    https://blog.csdn.net/c406495762/article/details/75172850

  7. AOP 如果被代理对象的方法设置了参数 而代理对象的前置方法没有设置参数 则无法拦截到

    AOP 如果被代理对象的方法设置了参数 而代理对象的前置方法没有设置参数 则无法拦截到

  8. 1019C Sergey's problem(思维)

    题意: 找出来一个点集S  使得S中的点不能互相通过一步到达 并且S中的点 可以在小于等于2的步数下到达所有的点 要父结点 不要子结点 这样就求出来一个点集S‘  而S'中可能存在 v -> u ...

  9. Crash dump进程信息

    linux下 比较简单,这里不在说明, windows下 相对复杂一点,用SetUnhandledExceptionFilter 来捕获 MiniDumpWriteDump 来写dmp文件,这种方法还 ...

  10. Nginx多进程高并发、低时延、高可靠机制在缓存代理中的应用

    1. 开发背景 现有开源缓存代理中间件有twemproxy.codis等,其中twemproxy为单进程单线程模型,只支持memcache单机版和redis单机版,都不支持集群版功能. 由于twemp ...