与javascript对象的DOM奇怪问题

时间:2012-03-20 17:11:32

标签: javascript dom tinymce

我们正在尝试从DOM获取tinyMCE对象以设置文本,但不幸的是,当我们在页面中注入javascript代码时它不起作用,而相同的代码在Javascript控制台(Chrome)中完美执行。

代码如下:

<script language="javascript">
 var testing = 'test';
 var curFrames;
 var curUrl;
 var mFrames;
 var cFrame;
 var editor;
 var editor2;

 window.onload=CodeOnLoad ;

//Javascript that runs on load
function CodeOnLoad() {
  curFrames=document.getElementsByTagName("frame");  


curFrames[0].onload = function() {
  curUrl= curFrames[0].contentDocument.getElementById("the_iframe").src;
  console.log(curUrl)

  if (curUrl.indexOf("post")!=-1)
  {
     mFrames=document.getElementsByTagName("frame");
     cFrame = mFrames[0].contentDocument.getElementById('the_iframe');
     editor = cFrame.contentWindow.tinymce;
     editor2 = editor.activeEditor;
  }
 }
}
</script>

以上代码将允许我们使用:

editor.activeEditor (which will return the correct editor object) // Only when we test it in the Browser Javascript console

,同时:

editor2 = editor.activeEditor; (the last line of the code - will return null) 

2 个答案:

答案 0 :(得分:1)

对于您的使用场景,有一个配置设置setup加上onInit处理程序。

另外:

editor = cFrame.contentWindow.tinymce;
editor2 = editor.activeEditor;

不会这样。

我将告诉你如何正确设置:

setup : function(ed) {

    ed.onInit.add(function(ed, event) {
          // do all you want to do after the editor has loaded here
          var my_window = ed.getWin();
          var my_document = ed.getDoc();

    });
});

答案 1 :(得分:0)

要注意两件事:

  1. 当父窗口完成加载时,绝对无法保证iframe内部的内容已完成加载。

  2. 如果iframe的源是从其他域加载的,则无法访问iframe的属性(例如contentWindow或contentDocument)。