我在同一页面中有一个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时它会失败?有什么方法可以解决这个问题吗?
答案 0 :(得分:0)
这样,至少可以更容易地单独调试JS和/或JS / applet交互。
答案 1 :(得分:0)
JavaScipt无法访问iframe的DOM,因为它位于单独的服务器上,但applet可以...
认为安德鲁有正确的想法。 JS可以访问其他服务器上的内容using JSONP。
要与跨域iframe通信,您可能还需要查看类似Porthole的内容。