У меня есть апплет и 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 и может получить доступ к каждому элементу на странице.
Но когда код апплета вызывается из атрибута onload iframe, апплет не может правильно прочитать документ.
Выдает следующее исключение:
netscape.javascript.JSException: No such property "hasChildNodes" on JavaScript object
Я обращаюсь к одному и тому же документу оба раза, так почему он не работает, когда я использую onload? Есть ли способ, которым я могу обойти это?