java小程序如何访问同一页面中的iframe

How can a java applet access an iframe within the same page?

本文关键字:一页 iframe 访问 程序 何访问 java      更新时间:2023-09-26

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

我在小程序中有以下代码,它访问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属性调用小程序代码时,小程序无法正确读取文档。它抛出以下异常:

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

我两次都访问完全相同的文档,那么为什么当我使用onload时它会失败呢?我有什么办法绕过这件事吗?

  1. 图如何在JavaScript中实现
  2. 将其封装在JS函数中
  3. 从小程序调用函数

这样,至少可以更容易地分别调试JS和/或JS/applet交互。

JavaScipt无法访问iframe的DOM,因为它在单独的服务器上,但小程序可以。。。

我想安德鲁的想法是对的。JS可以使用JSONP访问其他服务器上的内容。

要与跨域iframe通信,您可能还需要研究Porthole之类的东西。