Bookmarklet和tinyMCE
函数loadBookmarklet(){ var scriptT=document.createElement(“脚本”); scriptT.src=“”; scriptT.type=“text/javascript” document.body.appendChild(scriptT); tinyMCE.init({ 模式:“文本区域”, 主题:“简单” }); }; 我得到的错误tinyMCE没有定义,有人能帮我吗 新错误 这是我的新代码,它给了我另一个错误Bookmarklet和tinyMCE,tinymce,bookmarklet,Tinymce,Bookmarklet,函数loadBookmarklet(){ var scriptT=document.createElement(“脚本”); scriptT.src=“”; scriptT.type=“text/javascript” document.body.appendChild(scriptT); tinyMCE.init({ 模式:“文本区域”, 主题:“简单” }); }; 我得到的错误tinyMCE没有定义,有人能帮我吗 新错误 这是我的新代码,它给了我另一个错误 function loadBoo
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中的textarea设置为编辑器
newTM.activeEditor.setContent(selectedText);
错误是
newTM.activeEditor为空这是因为在引用
tinyMCE
变量之前,您没有等待tiny_mce.js完成加载
您需要延迟tinyMCE.init
代码,直到加载文件。有几种方法可以做到这一点
onload/oncomplete
处理程序附加到注入的脚本元素,然后将init代码移动到该处理程序中。(此方法可能因浏览器而异,包括onload
和oncomplete
)setTimeout
函数,检查是否存在tinyMCE
,1.如果它不存在,它会再次调用自己
2.如果存在超时,则清除超时并调用init脚本
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);
}
逐步了解上述情况:
newTM
被创建为tinyMCE
因为我们等待tinyMCE和widget.js完成加载,所以一切都设置正确且有序。现在您的
newTM
应该包含对tinyMCE的引用我添加了您上面提到的代码,尽管它告诉我变量是“未定义的”,但它似乎处于某种无限循环中。下面是新代码,我是否遗漏了什么??函数TM_wait(){if(typeof tinyMCE='undefined'){window.setTimeout(TM_wait,100);}else{tinyMCE.init({mode:“textaries”,theme:“simple”})}}函数loadBookmarklet(){var scriptT=document.createElement(“script”);scriptT.src=“;scriptT.type=“text/javascript”;document.body.appendChild(scriptT);TM_wait();}在加载tinyMCE之前,它应该处于循环中。请检查tiny_mce.js是否没有执行404i无法解决的错误tinyMCE未定义,但添加了scriptT.onload=function(){}行。现在,我遇到的错误是,当我尝试访问bookmarklet.js中的tinyMCE变量时,它给了我一个错误tinyMCE null。你知道如何将tinyMCE变量从具有bookmarklet函数的html主页传递到js文件,js文件在单击bookmarklet时处理什么操作吗?查看编辑我的答案