2013-05-15 4 views
2

Я пытаюсь заставить CKEditor.NET вставить некоторый текст в мой CKEditor, когда страница загружается.insertText в CKEditor через код За

Private Sub CKEditor_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles myCKEditor.Load 

     Dim insertScript As String 
     insertScript = "<script type=""text/javascript"">window.CKEDITOR.instances.myWidget_myCKEditor.insertText(""test"");</script>" 

     Dim cManager As ClientScriptManager = Parent.Page.ClientScript 

     cManager.RegisterStartupScript(Me.GetType, "insertText", insertScript) 

    End Sub 

Моя страница организована следующим образом:

  • myPage (ASPX)
    • myWidget (ASCX)
      • myCKEditor (из сборки)

Я получаю следующее сообщение об ошибке:

TypeError: Cannot read property 'instances' of undefined

Вероятно, CKEDITOR не вокруг, когда это называется. Если я открою консоль JS и запустил insertScript, она работает по своему желанию.

Я попробовал установить эту процедуру на MyBase.Load и Me.Load, а также безрезультатно, и даже попытался использовать window.Load = insertScript, все из которых производят ту же ошибку.

я заметил, что независимо от того, что я делаю, то последний вещь в источнике скрипт, который инициализирует CKEditor, т.е.

.... 
<script type="text/javascript">window.CKEDITOR.instances.myWidget_myCKEditor.insertText("test");</script> 
<script type="text/javascript"> 
//<![CDATA[ 
window.CKEDITOR_BASEPATH = '/ckeditor/'; 
//]]> 
</script> 
<script src="/ckeditor/ckeditor.js?t=C6HH5UF" type="text/javascript"></script> 
<script type="text/javascript"> 
//<![CDATA[ 
var CKEditor_Controls=[],CKEditor_Init=[];function CKEditor_TextBoxEncode(d,e){var f;if(typeof CKEDITOR=='undefined'||typeof CKEDITOR.instances[d]=='undefined'){f=document.getElementById(d);if(f)f.value=f.value.replace(/</g,'&lt;').replace(/>/g,'&gt;');}else{var g=CKEDITOR.instances[d];if(e&&(typeof Page_BlockSubmit=='undefined'||!Page_BlockSubmit)){g.destroy();f=document.getElementById(d);if(f)f.style.visibility='hidden';}else g.updateElement();}};(function(){if(typeof CKEDITOR!='undefined'){var d=document.getElementById('myWidget_myCKEditor');if(d)d.style.visibility='hidden';}var e=function(){var f=CKEditor_Controls,g=CKEditor_Init,h=window.pageLoad,i=function(){for(var j=f.length;j--;){var k=document.getElementById(f[j]);if(k&&k.value&&(k.value.indexOf('<')==-1||k.value.indexOf('>')==-1))k.value=k.value.replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&');}if(typeof CKEDITOR!='undefined')for(var j=0;j<g.length;j++)g[j].call(this);};window.pageLoad=function(j,k){if(k.get_isPartialLoad())setTimeout(i,0);if(h&&typeof h=='function')h.call(this,j,k);};if(typeof Page_ClientValidate=='function'&&typeof CKEDITOR!='undefined')Page_ClientValidate=CKEDITOR.tools.override(Page_ClientValidate,function(j){return function(){for(var k in CKEDITOR.instances){if(document.getElementById(k))CKEDITOR.instances[k].updateElement();}return j.apply(this,arguments);};});setTimeout(i,0);};if(typeof Sys!='undefined'&&typeof Sys.Application!='undefined')Sys.Application.add_load(e);if(window.addEventListener)window.addEventListener('load',e,false);else if(window.attachEvent)window.attachEvent('onload',e);})();CKEditor_Controls.push('myWidget_myCKEditor'); 
CKEditor_Init.push(function(){if(typeof CKEDITOR.instances['myWidget_myCKEditor']!='undefined' || !document.getElementById('myWidget_myCKEditor')) return;CKEDITOR.replace('myWidget_myCKEditor',{"htmlEncodeOutput" : true}); }); 
//]]> 
</script> 
</form> 
.... 

Все данные свидетельствуют о том, что я вызова сценария запуска на неправильно времени, но я не знаю, когда «подходящее время» для его вызова.

ответ

2

Yoy можно использовать JQuery windows.ready функцию, как показано ниже

insertScript = "<script type=""text/javascript""> <script language="javascript"> 
     $(document).ready(function() { 
      window.CKEDITOR.instances.myWidget_myCKEditor.insertText('test'); 
      }) 
     }) 
</script> "; 

    Dim cManager As ClientScriptManager = Parent.Page.ClientScript 

    cManager.RegisterStartupScript(Me.GetType, "insertText", insertScript) 

Это будет убедиться, что ваши JavaScript пожары только тогда, когда документ готовьтесь и не b4 что.

+0

После выполнения вашего ответа я получаю немного дальше ... теперь я получаю сообщение об ошибке: 'ypeError: Не удается вызвать метод 'insertText' из неопределенного', поэтому он видит 'CKEDITOR', но не экземпляр. –

+0

Кстати, я получаю ту же ошибку, используя 'window.load' –

0

Вид отказа, но я закончил загрузку того, что мне нужно было вставить на загрузку страницы и определить скрипт в файле .ascx.

В моей :

<script type="text/javascript"> 
    function ddChange(obj) { 
     window.CKEDITOR.instances.myWidget_myCKEditor.insertText(obj.value); 
     document.getElementById("myWidget_myCannedPicker").selectedIndex = 0; 
    } 
</script> 
... 
<asp:DropDownList ID="myCannedPicker" Width="400" runat="server" AutoPostBack="false" OnChange="ddChange(this)" /></span></td> 

В myWidget.ascx.vb:

Private Sub fillInitialValues() 

     ... 
     myCannedPicker.DataSource = dt 
     myCannedPicker.DataValueField = "msg_text" 
     myCannedPicker.DataTextField = "msg_name" 
     myCannedPicker.DataBind() 
     myCannedPicker.Items.Insert(0, New ListItem("Please make a selection:", "0")) 

    End Sub 

ли на самом деле не ответить на первоначальный вопрос, но это был подходящий обходной путь в моем случае.

Смежные вопросы