java applet如何在同一页面中访问iframe?

时间:2012-02-13 22:02:58

标签: java javascript iframe applet

我在同一页面中有一个applet和一个iframe。 iframe标记有一个onload属性,每次更改iframe页面时都会调用applet中的方法。 applet需要访问iframe文档的元素,并计算页面上不同类型标记的数量。

我在applet中有以下代码,它访问iframe

Class c = Class.forName("com.sun.java.browser.plugin2.DOM");
Method m = c.getMethod("getDocument", new Class[]{java.applet.Applet.class});
Object obj = m.invoke(null, new Object[]{this});
HTMLDocument doc = (HTMLDocument)obj;

NodeList nodeList = document.getElementsByName("iframe");
if (nodeList.getLength()>0) {
    Node node1 = nodeList.item(0);
    if (node1 instanceof HTMLIFrameElement) {
        Document doc = ((HTMLIFrameElement)node1).getContentDocument();
            if (doc instanceof HTMLDocument) {
                document = (HTMLDocument)doc;
                if (document.hasChildNodes() {
                    // do some stuff
                }
            }
        }
    }
}

如果在首次加载页面时运行此脚本,则可以正常运行 - 它可以访问iframe的代码并可以访问页面中的每个元素。

但是当从iframe的onload属性调用applet代码时,applet无法正确读取文档。 它抛出以下异常:

netscape.javascript.JSException: No such property "hasChildNodes" on JavaScript object

我两次都访问完全相同的文档,为什么在使用onload时它会失败?有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

  1. 了解如何在JavaScript中执行此操作
  2. 将其封装在JS函数中。
  3. 从小程序调用该函数。
  4. 这样,至少可以更容易地单独调试JS和/或JS / applet交互。

答案 1 :(得分:0)

  

JavaScipt无法访问iframe的DOM,因为它位于单独的服务器上,但applet可以...

认为安德鲁有正确的想法。 JS可以访问其他服务器上的内容using JSONP

要与跨域iframe通信,您可能还需要查看类似Porthole的内容。