1

RichTextBox 有这样的 dom 层次结构吗?

  <iframe>
    <html>
     <body>
     </body>
   </html>
 </iframe>

我发现将样式名称设置为 iframe 不起作用,必须将其设置为 body 元素。我试着这样做(在构造函数中):


  Element body = ((FrameElement) getElement().cast()).getContentDocument().getBody();
  body.setClassName("richTextArea");

NullPointerException 在这个男孩元素上被抛出,甚至我像这样包装它们:


  Scheduler.get().scheduleDeferred(new ScheduledCommand()
  {
     @Override
     public void execute()
     {
         Element body = ((FrameElement) getElement().cast()).getContentDocument().getBody();
         body.setClassName("richTextArea"); 
     }

  });

而实际的问题是 RichTextBox 被渲染得很奇怪,当它附加到 DOM 时,它的内部内容(html,body)没有生成,即使我将这些行包装到 onload() 方法中,NPE 有时也会被抛出,但是如果将它们包装成一个计时器,然后安排一个相对较长的等待时间,没有 NPE,但是你知道,我不能让某些事情依赖于这个不可预测的“相对较长的等待时间”。

谁能给出解决方案?

4

1 回答 1

0

您不能将主页中定义的 CSS 规则应用于 RichTextArea 的内容。您必须在由 RichTextArea 创建的 iframe 中包含样式。

这是一个内联样式的简单示例:

RichTextArea richTextArea = new RichTextArea();
richTextArea.setSize("200px", "200px");
richTextArea.setHTML("<html><head><style type=\"text/css\">h1 {color: red}</style></head><body><h1>Title</h1><p>content...</p></body></html>");
RootPanel.get().add(richTextArea);

您还可以使用外部 css 文件。必须相应调整设置为richTextEditor 的html 代码。

于 2012-08-12T07:50:32.513 回答