文档

Java™ 教程
隐藏目录
操作Applet的Web页面的DOM
教程路径:部署
教程:Java Applets
章节:更多关于Applets的操作

操作Applet网页的DOM

每个网页由一系列嵌套的对象组成。这些对象构成了文档对象模型(DOM)。Java applet可以使用Common DOM API遍历和修改其父网页的对象。

考虑一个Java applet的示例,它将其父网页的内容转储出来。

为了遍历和操作DOM树,您首先必须获取对网页的Document对象的引用。您可以使用com.sun.java.browser.plugin2.DOM类中的getDocument方法来实现。下面是一个代码片段,在DOMDump applet的start方法中检索对Document对象的引用。请参阅代码中的内联注释。

public void start() {
    try {
        // 使用反射获取文档
        Class c =
          Class.forName("com.sun.java.browser.plugin2.DOM");
        Method m = c.getMethod("getDocument",
          new Class[] { java.applet.Applet.class });
        
        // 将返回的对象强制转换为HTMLDocument;
        // 然后遍历或修改DOM
        HTMLDocument doc = (HTMLDocument) m.invoke(null,
            new Object[] { this });
        HTMLBodyElement body =
            (HTMLBodyElement) doc.getBody();
        dump(body, INDENT);
    } catch (Exception e) {
        System.out.println("New Java Plug-In not available");
        // 在这种情况下,您可以回退到
        // com.sun.java.browser.plugin.dom包中可用的旧引导机制
    }
}

现在您已经获取了对Document对象的引用,可以使用Common DOM API遍历和修改DOM树。DOMDump applet遍历DOM树并将其内容写入Java控制台日志。

private void dump(Node root, String prefix) {
    if (root instanceof Element) {
        System.out.println(prefix +
            ((Element) root).getTagName() + 
            " / " + root.getClass().getName());
    } else if (root instanceof CharacterData) {
        String data =
            ((CharacterData) root).getData().trim();
        if (!data.equals("")) {
            System.out.println(prefix +
                "CharacterData: " + data);
        }
    } else {
        System.out.println(prefix +
            root.getClass().getName());
    }
    NamedNodeMap attrs = root.getAttributes();
    if (attrs != null) {
        int len = attrs.getLength();
        for (int i = 0; i < len; i++) {
            Node attr = attrs.item(i);
            System.out.print(prefix + HALF_INDENT +
                "attribute " + i + ": " +
                attr.getNodeName());
            if (attr instanceof Attr) {
                System.out.print(" = " +
                    ((Attr) attr).getValue());
            }
            System.out.println();
        }
    }

    if (root.hasChildNodes()) {
        NodeList children = root.getChildNodes();
        if (children != null) {
            int len = children.getLength();
            for (int i = 0; i < len; i++) {
                dump(children.item(i), prefix +
                    INDENT);
            }
        }
    }
}

在浏览器中打开AppletPage.html以查看运行中的DOMDump小程序。请检查Java控制台日志以获取网页的DOM树转储。


注意:如果您没有看到小程序在运行,请安装至少Java SE Development Kit (JDK) 6 update 10版本。

注意:如果您没有看到示例在运行,可能需要在浏览器中启用JavaScript解释器,以便部署工具包脚本能够正常运行。

下载源代码以进一步进行实验。


上一页: 使用事件处理程序处理初始化状态
下一页: 将诊断信息写入标准输出和错误流