我们正在尝试从DOM获取tinyMCE对象以设置文本,但不幸的是,当我们在页面中注入javascript代码时它不起作用,而相同的代码在Javascript控制台(Chrome)中完美执行。
代码如下:
<script language="javascript">
var testing = 'test';
var curFrames;
var curUrl;
var mFrames;
var cFrame;
var editor;
var editor2;
window.onload=CodeOnLoad ;
//Javascript that runs on load
function CodeOnLoad() {
curFrames=document.getElementsByTagName("frame");
curFrames[0].onload = function() {
curUrl= curFrames[0].contentDocument.getElementById("the_iframe").src;
console.log(curUrl)
if (curUrl.indexOf("post")!=-1)
{
mFrames=document.getElementsByTagName("frame");
cFrame = mFrames[0].contentDocument.getElementById('the_iframe');
editor = cFrame.contentWindow.tinymce;
editor2 = editor.activeEditor;
}
}
}
</script>
以上代码将允许我们使用:
editor.activeEditor (which will return the correct editor object) // Only when we test it in the Browser Javascript console
,同时:
editor2 = editor.activeEditor; (the last line of the code - will return null)
答案 0 :(得分:1)
对于您的使用场景,有一个配置设置setup加上onInit处理程序。
另外:
editor = cFrame.contentWindow.tinymce;
editor2 = editor.activeEditor;
不会这样。
我将告诉你如何正确设置:
setup : function(ed) {
ed.onInit.add(function(ed, event) {
// do all you want to do after the editor has loaded here
var my_window = ed.getWin();
var my_document = ed.getDoc();
});
});
答案 1 :(得分:0)
要注意两件事:
当父窗口完成加载时,绝对无法保证iframe内部的内容已完成加载。
如果iframe的源是从其他域加载的,则无法访问iframe的属性(例如contentWindow或contentDocument)。