zoukankan      html  css  js  c++  java
  • 解析notes自带的rtf javaapplet编辑器

    在写b/s应用的时候,经常有检查域有效性的需求。我们一般的做法是用写javascript函数检查域的有效性,通过后再提交,不通过则提示出错。建一个最简单的表单,包含一个用javaapplet形式显示的 rtf域,名为MYRTF。

    在写b/s应用的时候,经常有检查域有效性的需求。我们一般的做法是用写javascript函数检查域的有效性,通过后再提交,不通过则提示出错。
    现在有这样一个需求,就是在b/s上检查notes自带的rtf javaapplet编辑器内容。也就是说我们得想办法用js访问到这个notes编辑器。

    建一个最简单的表单,包含一个用javaapplet形式显示的 rtf域,名为MYRTF。在web上预览,查看源文件得到如下html代码:

    <HTML>
    <HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=GB2312">

    <SCRIPT LANGUAGE="JavaScript">
    <!--
    document._domino_target = "_self";
    function _doClick(v, o, t, h) {
    var form = document._rtftest;
    if (form.onsubmit) {
    var retVal = form.onsubmit();
    if (typeof retVal == "boolean" && retVal == false)
    return false;
    }
    var target = document._domino_target;
    if (o.href != null) {
    if (o.target != null)
    target = o.target;
    } else {
    if (t != null)
    target = t;
    }
    form.target = target;
    form.__Click.value = v;
    if (h != null)
    form.action += h;
    form.submit();
    return false;
    }

    function _getEditAppletData(){
    var form = document._rtftest;
    for(i=0;i<form.elements.length;i++) {
    if(form.elements[i].editorApplet != null) {
    form.elements[i].value = form.elements[i].editorApplet.getText("text//html");
    }
    }
    return true;
    }
    // -->
    </SCRIPT>
    </HEAD>
    <BODY TEXT="000000" BGCOLOR="FFFFFF">

    <FORM onSubmit="_getEditAppletData(); return true;" METHOD=post ACTION="/application/test/William/test.nsf/rtftest?OpenForm&Seq=1" NAME="_rtftest">
    <INPUT TYPE=hidden NAME="__Click" VALUE="0">
    <APPLET NAME="lnaMYRTF" CODE="Lotus.notes.apps.editorapplet.EditorApplet.class" CODEBASE="/domjava" ARCHIVE="editor.cab" ALT="Editor" TITLE="rtftt" WIDTH="100%" HEIGHT="100%" MAYSCRIPT>
    <PARAM NAME="cabbase" VALUE="editor.cab">
    <PARAM NAME="locale" VALUE="zh-cn">
    </APPLET>

    <INPUT TYPE=hidden NAME="MYRTF">
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    document._rtftest.MYRTF.editorApplet = document.lnaMYRTF;
    // -->
    </SCRIPT>
    </FORM>
    </BODY>
    </HTML>

    可以看到 domino为MYRTF域产生了两个元素。一个名为lnaMYRTF的APPLET和一个名为MYRTF的hidden input。并且通过js语句将这两个元素关联起来(document._rtftest.MYRTF.editorApplet = document.lnaMYRTF)。

    以上这些对我们来说只是表面现象,我们关心的问题在js函数_getEditAppletData()中得到解答。我们只要使用applet的.getText("text//html")方法就可以得到applet的内容了。但是,用这种方法的得到的是rtf域中带格式的html内容(相当于innerHTML),如果我们想得到不带格式的文本内容可以用.getText("")。
    以下就是我用来判断rtf编辑器是否为空的js语句:Empty=(obj.editorApplet.getText("").replace( /^s/, "" ).replace( /s$/, "" )=="")
    至此问题解决。

    回过头再看html源文件,我们可以看到domino对表单提交的处理。表单在提交时调用 _getEditAppletData()函数寻找所有editorApplet关联的字段,然后将对应applet中的带格式的html内容赋值给对应字段,然后继续提交工作。

  • 相关阅读:
    Sharepoint2013:日期控件报错
    Sharepoint2013:在页面上显示错误信息
    BeforeProperties/AfterProperties in Event Receivers
    一个ORM的实现(附源代码)
    DBHelper (支持事务与数据库变更)
    TypeError: <flask_script.commands.Command object at 0x00000201F36629E8>: option values must be strings
    Flask启动时报错:ValueError: urls must start with a leading slash
    {TypeError}__init__() takes from 1 to 2 positional arguments but 3 were given
    pycharm2019激活方法(有效期到2100年1月1日)
    Warning | 3719 | 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
  • 原文地址:https://www.cnblogs.com/hannover/p/2328656.html
Copyright © 2011-2022 走看看