2012-03-20 85 views
1

我們試圖從DOM中獲取tinyMCE對象以設置文本,但不幸的是,當我們在頁面中注入JavaScript代碼時,它不工作,而相同的代碼在Javascript Console中完美執行(鉻)。javascript對象的DOM奇怪問題

的代碼如下:

<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) 
+0

確定的編輯框已經嘗試訪問'editor.activeEditor'時加載?它看起來像你試圖訪問尚未加載的對象 - 你需要對iframe進行一些onload回調。 – nrabinowitz 2012-03-20 17:23:32

回答

0

有兩件事情需要注意的:

  1. 當父窗口完成加載時,絕對不能保證iframe內部的內容已完成加載。

  2. 如果iframe的源從不同的域加載,則無法訪問iframe的屬性(如contentWindow或contentDocument)。

+0

根據第一個問題。是否有可能有另一個onload函數的內部iframe? – glarkou 2012-03-20 17:58:37

+0

@salamis我注意到的一件事是,你在一些地方稱你的元素爲「框架」,在其他地方稱爲「iframe」。這些不是相同的節點類型。 getElementsByTagName('frame')不會返回iframe。 – jbabey 2012-03-20 18:03:28

1

對於您的使用場景,有tinymce配置設置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(); 

    }); 
}); 
+0

我應該把那個放在哪裏?不幸的是,我想修改Moodle裏面的tinymce – glarkou 2012-03-25 23:12:08

+0

tinymce配置應該存儲在一個名爲tinymce.js.php的文件中 – Thariama 2012-03-26 07:39:45

+0

感謝您的回覆。我試圖找到該文件,但它不在那裏。我正在使用Moodle 2.2。 – glarkou 2012-03-26 11:11:25