0

函数 loadBookmarklet() { var scriptT = document.createElement("script"); scriptT.src = " http://abc.com/tinymce/jscripts/tiny_mce/tiny_mce.js "; scriptT.type = "文本/javascript";

document.body.appendChild(scriptT); tinyMCE.init({ mode : "textareas", theme : "simple" }); };

我收到错误 tinyMCE 未定义,谁能帮我解决这个问题?

新错误

这是我拥有的新代码,它给了我另一个错误

function loadBookmarklet() {
      var scriptT = document.createElement("script");
      scriptT.src = "http://abc.com/tiny_mce.js";
          scriptT.type = "text/javascript";
      scriptT.onload = function(){}
      document.body.appendChild(scriptT);
      tinyMCE.init({ mode : "textareas", theme : "simple" }); 
      newTM = tinyMCE;
      var scriptW = document.createElement("script");
      scriptW.src = "http://abc.com/widget.js";
      scriptW.type = "text/javascript";
      document.body.appendChild(scriptW);

    }

在我的 widget.js 中,我试图将 widget.js 中的 textarea 设置为编辑器

newTM.activeEditor.setContent(selectedText);

错误是

newTM.activeEditor 为空

4

1 回答 1

1

那是因为您在引用tinyMCE变量之前没有等待 tiny_mce.js 完成加载

您需要将tinyMCE.init代码推迟到文件加载完毕。有几种方法可以做到这一点

  1. onload / oncomplete处理程序附加到注入的脚本元素,然后在该处理程序中移动初始化代码。(此方法在 和 方面可能因浏览器而onloadoncomplete
  2. 设置一个setTimeout检查是否存在的函数tinyMCE
    1. 如果不存在,它会再次调用自己
    2. 如果存在,则清除超时并调用 init 脚本

我一般用第二种方法,所以你的代码可以调整为

var scriptT = document.createElement("script"); 
scriptT.src = "http://abc.com/tinymce/jscripts/tiny_mce/tiny_mce.js"; scriptT.type = "text/javascript";
document.body.appendChild(scriptT);

//Your script loading code is above this line

function TM_wait() { //this function checks for existence of tinyMCE
  if(typeof tinyMCE == 'undefined') {
    window.setTimeout(TM_wait,100); 
    //calls itself if tinyMCE is not loaded
  }else{
    tinyMCE.init({ mode : "textareas", theme : "simple" }); 
    //calls the init function cos tinyMCE is loaded
  }

}

TM_wait(); // calls the checker function for the first time

编辑

作为对您的编辑的回应,试试这个

function loadBookmarklet() {
      var scriptT = document.createElement("script");
      scriptT.src = "http://abc.com/tiny_mce.js";
      scriptT.type = "text/javascript";
      scriptT.onload = function(){
        var scriptW = document.createElement("script");
        scriptW.src = "http://abc.com/widget.js";
        scriptW.type = "text/javascript";
        scriptW.onload = function(){
           newTM = tinyMCE;
           newTM.init({ mode : "textareas", theme : "simple" }); 
        }
        document.body.appendChild(scriptW);
      }
      document.body.appendChild(scriptT);
}

一步一步的上面发生的事情:

  1. TinyMCE 已加载
  2. 当 tinyMCE完成加载时,您的小部件已加载
  3. 当您的小部件完成加载时,该变量newTM将创建为tinyMCE
  4. tinyMCE 已初始化

因为我们等待 tinyMCE 和 widget.js 完成加载,所以一切都按顺序正确设置。现在您newTM应该包含对 tinyMCE 的引用

于 2009-12-30T04:21:45.883 回答