|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- /*!
- * artDialog-plus
- * Date: 2013-11-09
- * https://github.com/aui/artDialog
- * (c) 2009-2014 TangBin, http://www.planeArt.cn
- *
- * This is licensed under the GNU LGPL, version 2.1 or later.
- * For details, see: http://www.gnu.org/licenses/lgpl-2.1.html
- */
- define(function (require) {
-
- var $ = require('jquery');
- var dialog = require('./dialog');
- var drag = require('./drag');
-
- dialog.oncreate = function (api) {
-
- var options = api.options;
- var originalOptions = options.original;
-
- // 页面地址
- var url = options.url;
- // 页面加载完毕的事件
- var oniframeload = options.oniframeload;
-
- var $iframe;
-
-
- if (url) {
- this.padding = options.padding = 0;
-
- $iframe = $('<iframe />');
-
- $iframe.attr({
- src: url,
- name: api.id,
- width: '100%',
- height: '100%',
- allowtransparency: 'yes',
- frameborder: 'no',
- scrolling: 'no'
- })
- .on('load', function () {
- var test;
-
- try {
- // 跨域测试
- test = $iframe[0].contentWindow.frameElement;
- } catch (e) {}
-
- if (test) {
-
- if (!options.width) {
- api.width($iframe.contents().width());
- }
-
- if (!options.height) {
- api.height($iframe.contents().height());
- }
- }
-
- if (oniframeload) {
- oniframeload.call(api);
- }
-
- });
-
- api.addEventListener('beforeremove', function () {
-
- // 重要!需要重置iframe地址,否则下次出现的对话框在IE6、7无法聚焦input
- // IE删除iframe后,iframe仍然会留在内存中出现上述问题,置换src是最容易解决的方法
- $iframe.attr('src', 'about:blank').remove();
-
-
- }, false);
-
- api.content($iframe[0]);
-
- api.iframeNode = $iframe[0];
-
- }
-
-
- // 对于子页面呼出的对话框特殊处理
- // 如果对话框配置来自 iframe
- if (!(originalOptions instanceof Object)) {
-
- var un = function () {
- api.close().remove();
- };
-
- // 找到那个 iframe
- for (var i = 0; i < frames.length; i ++) {
- try {
- if (originalOptions instanceof frames[i].Object) {
- // 让 iframe 刷新的时候也关闭对话框,
- // 防止要执行的对象被强制收回导致 IE 报错:“不能执行已释放 Script 的代码”
- $(frames[i]).one('unload', un);
- break;
- }
- } catch (e) {}
- }
- }
-
-
- // 拖拽支持
- $(api.node).on(drag.types.start, '[i=title]', function (event) {
- // 排除气泡类型的对话框
- if (!api.follow) {
- api.focus();
- drag.create(api.node, event);
- }
- });
-
- };
-
-
-
- dialog.get = function (id) {
-
- // 从 iframe 传入 window 对象
- if (id && id.frameElement) {
- var iframe = id.frameElement;
- var list = dialog.list;
- var api;
- for (var i in list) {
- api = list[i];
- if (api.node.getElementsByTagName('iframe')[0] === iframe) {
- return api;
- }
- }
- // 直接传入 id 的情况
- } else if (id) {
- return dialog.list[id];
- }
-
- };
-
-
-
- return dialog;
-
- });
|