2

CKEditor のダイアログに関係する特有の問題があります。ダイアログウィンドウにphpファイル(データテーブルを含む)を埋め込むことができました。ユーザーは、CKEditor に挿入される行を選択できます。

HTML をダイアログ ウィンドウに埋め込むのは簡単に思えました。

CKEDITOR.dialog.add( 'tableDialog', function( editor ) {
    return {
        title: 'parametres',
        minWidth: 800,
        minHeight: 500,
        contents: [
            {
                id: 'tab-basic',
                label: 'Basic Settings',
                elements: [
                    {
                    type:"html",
                    id:"htmlPreview",
                    style:"width:95%;height:95%;",
                    html:test_HTML,
                        commit: function( element ) {
etc..

面白いのは、変数 'test_HTML' の設定が難しいことです。HTML オブジェクトとして定義すると、完全に機能します。

test_HTML = '<object type="text/html" data="http://entseditor.etest.ee/edit/mm_insert.php" style="width:100%; height:100%"><p></p></object>';

、jQuery ajaxでそれを行うと失敗します:

var request = $.ajax({
  url: "http://entseditor.etest.ee/edit/mm_insert.php",
  //type: "POST",
  //data: {id : menuId},
  dataType: "html"
});

request.done(function(msg) {
  //$("#asdasd").html( msg );
    test_HTML =  msg ;
  //alert( 'success' + test_HTML );
});

request.fail(function(jqXHR, textStatus) {
  alert( "Request failed: " + textStatus );
});

(リクエストは適切で、id='asdasd' に適切な応答を返しますが、CKEditor ダイアログ ウィンドウには、「Uncaught TypeError: Undefined のメソッド 'charAt' を呼び出せません」と表示されます。それでも、両方の HTML は同じように見えます。)

オブジェクトを使用しても問題はありませんが、作成された #document からの応答が得られないようです。変数と非表示フィールドを試しましたが、「親」ドキュメントからアクセスできません..

CKEditor のこちら側の経験がある人はいますか?

(すべてを適切な言葉で説明していない場合は申し訳ありません..)

4

1 に答える 1

1

全体像をつかむのは難しいですが、同期/非同期の問題のように感じます。変数が設定された後、確実に変数にアクセスしていますか? 関数request.doneが宣言される前CKEDITOR.dialog.addに実際の関数が呼び出されたとしても、非同期呼び出しであるため、実行test_HTML = msg ;後に呼び出される可能性があります。CKEDITOR.dialog.add

つまり、ajax が読み込まれている間、JavaScript は実行され続け、未定義のまま実行CKEDITOR.dialog.addされます。test_HTMLコードがアクセスする前に100%確実に設定されるデフォルト値に設定してみてください。また、コードが実行される順序の流れに従うようにしてください。

于 2013-04-08T15:24:39.297 に答える