私には解決できない問題があり、アイデアがないのでアドバイスが必要です:
コンテキスト: 私は自分の Web サイトで tinyMCE エディターを使用しており、外部の xml ファイルを含めるカスタム プラグインを開発しました。これまでのところ、すべてが期待どおりに機能しています。外部 xml ファイルへのリンクは、span-Tags として表されます。
<span id="-[XML Document 1]-" title="erg" class="xml_embed xml_include">-[XML Document 1]-</span>
ただし、通常のテキストと区別するためのカスタム クラス (xml_include) を持つ tinyMCE エディターでのみ、html/ソース コード ビューに切り替えるか保存すると、これらのスパン タグは xi:include 要素に置き換えられます。
<xi:include xmlns:xi="http://www.w3.org/TR/XInclude" show="xml_embed" href="erg">-[XML Document 1]-</xi:include>
span タグの innerHTML ("-XML Document 1]-") として設定されたテキストは、エディターでプレースホルダーとして機能し、ソース ビューで xi:include タグに移動され、プレースホルダーとして機能します。そこにも。
今問題に:
ソース コード ポップアップが表示される前に、変換先のコードspan.xml_include
が呼び出されます。xi:include
ed.onPreProcess.add(function(ed, o) {
var elm;
var domelm;
//get all span.xml_include elements
tinymce.each(ed.dom.select('span.xml_include', o.node), function(n) {
//IE ignores innerHTML when created with tinymce.dom, therefore use native JS createElement method to tell IE that custom tag is valid HTML
if(tinymce.isIE)
{
domelm = document.createElement('xi:include');
domelm.setAttribute("xmlns:xi", "http://www.w3.org/TR/XInclude");
domelm.href = n.title;
domelm.innerHTML = n.innerHTML;
domelm.show = n.className.split(/\s+/)[0];
document.body.appendChild(domelm);
ed.dom.replace(domelm, n);
}
else
{
//ed = tinyMCE.activeEditor
elm = ed.dom.create('xi:include', {href: n.title, show: n.className.split(/\s+/)[0]}, n.innerHTML);
elm.setAttribute("xmlns:xi", "http://www.w3.org/TR/XInclude");
ed.dom.replace(elm, n);
}
});
});
このコードは FF と Chrome では問題なく動作しますが、IE では動作しません (私は 7 と 8 をテストしました): IE では、新しい要素「domelm」の innerHTML を設定できません。空白のままにするか、明示的に設定するとエラーがスローされます。n.innerHTML にアクセスできます。行に「不明なランタイム エラー」が表示されるdomelm.innerHTML = n.innerHTML;
他に何を試しましたか?
ネイティブ JS の方法:
domelm.appendChild(document.createTextNode(n.innerHTML));
テキスト ノードを作成し、それを "domelm" に追加して成功しませんでした (エラーが発生しました: "メソッドまたはプロパティ アクセスへの予期しない呼び出し"、これは "Unerwarteter Aufruf oder Zugriff" (ドイツ語版) からの翻訳である必要があります)。 )))tinyMCE API の方法:
tinymce.DOM.setHTML(domelm, n.innerHTML);
エラーは発生しませんでしたが、通常の空白の innerHTML も発生しましたjQueryの方法:
$('#domelm').html(n.innerHTML);
または最初var jQelm = $(domelm);
に、jQelm.text(...);
またはjQelm.html(...);
問題ではない、どちらも機能しない、IEは常にjqueryコアで「メソッドへの予期しない呼び出し」エラーを返しますが、明らかに触れません..上記の if 条件の「else」部分に見られるように、tinyMCE で要素を作成する方法..if
domelm.innerHTML = n.innerHTML;
が明示的に設定されていない場合、elm.innerHTML は空白のままです。それ以外の場合は、上記のアプローチと同じエラーが発生します。よく検出をスキップしif(tinymce.isIE)
ます..
他に何ができますか?提案?
また、カスタム xml 名前空間を適切に宣言し、MIME タイプをapplication/xhtml+xml
単に の代わりにに変更し、 IE のノードをtext/html
「アナウンス」し、一般的にコードを IE に喜ばせるように変更しました..これが最後の大きなバグのようです。克服する必要があります..FFとChromeはローカルとリモートで正常に動作し、エラーが表示されないため、コードのエラーかどうかはわかりません..?xi:include
document.createElement('xi:include');
助けていただければ幸いです。私の意図が明確になるように、十分なコンテキストを提供していただければ幸いです。間違いをお詫びします。英語は私の母国語ではありません:)