农燊高科官方网站
Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

144 linhas
3.4 KiB

  1. /*!
  2. * artDialog-plus
  3. * Date: 2013-11-09
  4. * https://github.com/aui/artDialog
  5. * (c) 2009-2014 TangBin, http://www.planeArt.cn
  6. *
  7. * This is licensed under the GNU LGPL, version 2.1 or later.
  8. * For details, see: http://www.gnu.org/licenses/lgpl-2.1.html
  9. */
  10. define(function (require) {
  11. var $ = require('jquery');
  12. var dialog = require('./dialog');
  13. var drag = require('./drag');
  14. dialog.oncreate = function (api) {
  15. var options = api.options;
  16. var originalOptions = options.original;
  17. // 页面地址
  18. var url = options.url;
  19. // 页面加载完毕的事件
  20. var oniframeload = options.oniframeload;
  21. var $iframe;
  22. if (url) {
  23. this.padding = options.padding = 0;
  24. $iframe = $('<iframe />');
  25. $iframe.attr({
  26. src: url,
  27. name: api.id,
  28. width: '100%',
  29. height: '100%',
  30. allowtransparency: 'yes',
  31. frameborder: 'no',
  32. scrolling: 'no'
  33. })
  34. .on('load', function () {
  35. var test;
  36. try {
  37. // 跨域测试
  38. test = $iframe[0].contentWindow.frameElement;
  39. } catch (e) {}
  40. if (test) {
  41. if (!options.width) {
  42. api.width($iframe.contents().width());
  43. }
  44. if (!options.height) {
  45. api.height($iframe.contents().height());
  46. }
  47. }
  48. if (oniframeload) {
  49. oniframeload.call(api);
  50. }
  51. });
  52. api.addEventListener('beforeremove', function () {
  53. // 重要!需要重置iframe地址,否则下次出现的对话框在IE6、7无法聚焦input
  54. // IE删除iframe后,iframe仍然会留在内存中出现上述问题,置换src是最容易解决的方法
  55. $iframe.attr('src', 'about:blank').remove();
  56. }, false);
  57. api.content($iframe[0]);
  58. api.iframeNode = $iframe[0];
  59. }
  60. // 对于子页面呼出的对话框特殊处理
  61. // 如果对话框配置来自 iframe
  62. if (!(originalOptions instanceof Object)) {
  63. var un = function () {
  64. api.close().remove();
  65. };
  66. // 找到那个 iframe
  67. for (var i = 0; i < frames.length; i ++) {
  68. try {
  69. if (originalOptions instanceof frames[i].Object) {
  70. // 让 iframe 刷新的时候也关闭对话框,
  71. // 防止要执行的对象被强制收回导致 IE 报错:“不能执行已释放 Script 的代码”
  72. $(frames[i]).one('unload', un);
  73. break;
  74. }
  75. } catch (e) {}
  76. }
  77. }
  78. // 拖拽支持
  79. $(api.node).on(drag.types.start, '[i=title]', function (event) {
  80. // 排除气泡类型的对话框
  81. if (!api.follow) {
  82. api.focus();
  83. drag.create(api.node, event);
  84. }
  85. });
  86. };
  87. dialog.get = function (id) {
  88. // 从 iframe 传入 window 对象
  89. if (id && id.frameElement) {
  90. var iframe = id.frameElement;
  91. var list = dialog.list;
  92. var api;
  93. for (var i in list) {
  94. api = list[i];
  95. if (api.node.getElementsByTagName('iframe')[0] === iframe) {
  96. return api;
  97. }
  98. }
  99. // 直接传入 id 的情况
  100. } else if (id) {
  101. return dialog.list[id];
  102. }
  103. };
  104. return dialog;
  105. });