主题: 外部调用KE.plugin['image']的疑问{后续问题}
作者: 若海, 发布日期: 2009-08-28 08:53:31, 浏览数: 8641

//编辑器参数
var KE_CFG = {
id : 'content',
filterMode: false,
minwidth: '610',
minHeight: '350',
skinType : 'default',
skinsPath : 'include/editor/skins/',
pluginsPath : 'include/editor/plugins/'
}
KE.show(KE_CFG);
//编辑器接口
function EditUpload(id) {
id = id || 'content';
KE.plugin['image'].click(id);
KE.g[id].dialog.src += '?zv';
var dialog = KE.g[id].dialog;
var dialogDoc = KE.util.getIframeDoc(KE.g[id].dialog);
var type = KE.$('type', dialogDoc).value;
alert(type);
}

上述代码中,KE.g[id].dialog.src += '?zv';可以正常设置iframe的src,说明对象成功调用。但是alert(type);却无法取得值,请帮忙看看是否有何疏漏之处。

作者: Roddy, 发布日期: 2009-08-28 09:25:23
iframe引用外部html时各个阶段都有顺序的。
  1. 设置iframe src。
  2. 下载src指定的html文件。
  3. 创建iframe DOM。// 这个阶段结束后才可以调用iframe document对象。
  4. 下载图片等资源。
你现在是没有下载完HTML,所以取不到值很正常。解决方法是每隔一段时间去检查dialogDoc是否存在。
回复
作者: 若海, 发布日期: 2009-08-28 10:03:09

//编辑器接口
  function EditUpload(id, dialog) {
  var id = id || 'content';
  if(!dialog){
   KE.plugin['image'].click(id);
   var loadStat= false;
   var dialog = KE.g[id].dialog;
   if(KE.browser == "IE") {
    dialog.onreadystatechange = function() {
     if(this.readyState == "complete") {
      loadStat = true;EditUpload(id,this);
     }
    };
   } else {
    dialog.onload = function() {
     loadStat = true;EditUpload(id,this);
    };
   }
   if(!loadStat) { dialog.src += '?renew';}
  } else {
   var dialogDoc = KE.util.getIframeDoc(dialog);
   var type2 = KE.$('type', dialogDoc).value;
   alert(type2);
  }
 }

实在是罪过呀,把浏览器的这个基本特性都给忽略啦。这下测试成功了。

但执行效率等需要考究的问题,还要请大家一起商酌。或是有更简单的方法,还请大家指出。

回复
作者: 若海, 发布日期: 2009-09-11 12:36:01

一下为最终代码,解决一些问题,但效率感觉很低,也只能凑活了,盼高手来解决。

 //编辑器接口
 function EditUpload(id, dialog) {
  var id = id || 'content';
  if(!dialog) {
   KE.plugin['image'].click(id);
   var loadStat= false, dialog = KE.g[id].dialog;
   if(KE.browser == "IE") {
    dialog.onreadystatechange = function() {
     if(this.readyState == "complete") {
      EditUpload(id,this);loadStat=true;
      this.onreadystatechange=null;
     }
    };
   } else {
    dialog.onload = function() {
     EditUpload(id,this);loadStat=true;
     this.onload=null;
    };
   }
   if(!loadStat) { dialog.src += '?renew';}
  } else {
   var dialogDoc = KE.util.getIframeDoc(dialog);
   KE.$('type', dialogDoc).disabled = true;
   KE.$('app', dialogDoc).value = 'zv';
  }
 }

回复
发表新帖 发表回复