2014-06-13 5 views
0

나는이 방법액세스 ckeditor는 장고 프로젝트에서

CKEDITOR.replace('id_content', { 
    toolbar: 'Basic', 
    readOnly: {{ editing|yesno:"false,true" }} 
}); 

에 내 casperjs 스크립트에 ckeditor를로드 한 나는이 방법

var ckeditor = this.evaluate(function() { 
     return document.querySelector('#id_content').contentWindow.CKEDITOR; 
}); 

ckeditor.instances.id_content.setData('<p>AAA bbb CCC</p>'); 

에서 편집기에 액세스하려고 이 게시물에서 읽은 내용을 토대로 access-javascript-ckeditor-object-within-an-iframe 콘솔 출력은 다음과 같습니다.

FAIL TypeError: 'null' is not an object (evaluating 'ckeditor.instances') 

어떤 생각입니까? 감사!

편집 :

나는 모든 물건을하려고하면은하지 않은 변경 방법에게 ckeditor 내용을 평가한다. 다음 코드

var ckeditor = this.evaluate(function() { 
    var ckeditor = document.querySelector('#id_content').contentWindow.CKEDITOR; 
    ckeditor.instances.id_content.setData('<p>AAA bbb CCC </p>'); 
}); 

this.test.assertField('content', '<p>AAA bbb CCC</p>'); 

당신은과 casperjs (및 phantomjs)의 페이지 문맥에서 기능을 전달할 수 없습니다 출력

FAIL "content" input field has the value "<p>AAA bbb CCC</p>" 
# type: assertField 
# code: this.test.assertField('content', '<p>AAA bbb CCC</p>'); 
# subject: false 
# inputName: "content" 
# actual: "<p>In et qui nobis eos. Rem impedit ullam nihil placeat in. Et ea explicabo earum quam. Earum rerum ipsum ea soluta.</p>\n" 
# expected: "<p>AAA bbb CCC</p>" 

답변

1

을 실패합니다. Number, String, [] 및 {}와 같은 프리미티브 만 전달할 수 있습니다. 따라서 contentWindow.CKEDITOR은 아마도 new으로 생성 된 개체 일 것입니다. 당신이 wait 조금 수,

var data = '<p>AAA bbb CCC</p>'; 
this.evaluate(function (contendata) { 
     var ckeditor = document.querySelector('#id_content').contentWindow.CKEDITOR; 
     ckeditor.instances.id_content.setData(contendata); 
}, data); 

이 ckeditor 페이지에 모든 조정을 할 시간이 있는지 확인하려면 : 당신은 페이지 문맥 안에 모든 물건을 그냥 페이지 문맥에 필요한 문자열을 전달해야합니다 :

this.thenEvaluate(function (contendata) { 
     var ckeditor = document.querySelector('#id_content').contentWindow.CKEDITOR; 
     ckeditor.instances.id_content.setData(contendata); 
}, data); 
this.wait(1000, function(){ 
    this.test.assertField('content', '<p>AAA bbb CCC</p>'); 
}); // sec 

심지어 특정 데이터를 기다립니다

var x = require("casper").selectXPath; 
this.thenEvaluate(function (contendata) { 
     var ckeditor = document.querySelector('#id_content').contentWindow.CKEDITOR; 
     ckeditor.instances.id_content.setData(contendata); 
}, data); 
this.waitForSelector(x("//*[contains(text(),'AAA bbb CCC')]"), function(){ 
    this.test.assertField('content', '<p>AAA bbb CCC</p>'); 
}); 
+0

조언이 정확하지만, 내용은 아직 변경되지 않습니다. –

+0

@SalvatoreAvanzo 나는'ckeditor'에 익숙하지 않으므로 당신이하는 바른 전화인지 모른다. 또한, 그것이 옳지 않은지 어떻게 확인합니까? 스크린 샷을 만드시겠습니까? 그렇게하기 전에 '대기'해야 할 수도 있습니다. –

관련 문제