0

function loadBookmarklet() { 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); tinyMCE.init({ モード: "テキストエリア", テーマ: "シンプル" }); };

tinyMCE is not defined というエラーが表示されます。だれか助けてもらえますか?

新しいエラー

これが私が持っている新しいコードで、別のエラーが発生しています

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のテキストエリアをエディターに設定しようとしています

newTM.activeEditor.setContent(selectedText);

エラーは

newTM.activeEditor が null です

4

1 に答える 1

1

tinyMCEこれは、変数を参照する前に tiny_mce.js の読み込みが完了するのを待っていないためです。

tinyMCE.initファイルがロードされるまでコードを延期する必要があります。これを行うにはいくつかの方法があります

  1. 挿入されたスクリプト要素にハンドラーをアタッチし、onload / oncompleteそのハンドラー内に init コードを移動します。(この方法は、とに関してブラウザごとに異なる場合があります)onloadoncomplete
  2. の存在をsetTimeoutチェックする関数を設定し ます。 1. 存在しない場合は、自分自身を再度呼び出します 2. 存在する場合は、タイムアウトがクリアされ、init スクリプトが呼び出されますtinyMCE

私は通常、2 番目の方法を使用するため、コードを次のように調整できます。

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 のロードが完了するのを待っているため、すべてが適切かつ適切に設定されています。これで、 newTMtinyMCE への参照が含まれているはずです

于 2009-12-30T04:21:45.883 に答える