我正在尝试将iframe(在designMode中)用作富文本编辑器。
<iframe name="richTextField" id="richTextField" class="rte"></iframe>
我还有一个按钮,可以通过调用javascript函数iBold在iframe中加粗/解开文本。
<a href="javascript:iBold()" type="button" value="bold"><img src="/images/bold.gif" id="boldButton"/></a>
function iBold()
{
richTextField.document.execCommand('bold');
console.log(window.frames['richTextField'].document.body.innerHTML);
}
粗体按钮适用于大多数情况,但有一种情况不起作用(在IE11中)。如果我在iframe中选择(突出显示)文本的一小部分,我可以加粗它并用粗体按钮解开它,但是如果我在iframe中选择所有文本,我可以加粗它,但我永远不能解开它。在那之后,文本永远是大胆的;无论我选择/突出显示什么,execCommand都不会解开任何东西。注意:它当然适用于Firefox。
答案 0 :(得分:0)
这不是最好的解决方案,但至少可以使用以下方法。
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
public class BlockingByteArrayInputStream extends ByteArrayInputStream {
private CountDownLatch latch;
public BlockingByteArrayInputStream(byte[] buf) {
super(buf);
latch = new CountDownLatch(1);
}
@Override
public synchronized int read() {
int read = super.read();
if (read == -1) {
waitForUnblock();
}
return read;
}
@Override
public int read(byte[] b) throws IOException {
int read = super.read(b);
if (read == -1) {
waitForUnblock();
}
return read;
}
@Override
public synchronized int read(byte[] b, int off, int len) {
int read = super.read(b, off, len);
if (read == -1) {
waitForUnblock();
}
return read;
}
private void waitForUnblock() {
try {
latch.await(10, TimeUnit.SECONDS);
} catch (InterruptedException e) {
throw new RuntimeException("safeAwait interrupted");
}
}
@Override
public void close() throws IOException {
super.close();
latch.countDown();
}
}