Как Java-апплет может получить доступ к iframe на той же странице? - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть апплет и 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? Есть ли способ, которым я могу обойти это?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2013

JavaScipt не может получить доступ к DOM iframe, как на отдельном сервере, но апплет может ...

Думаю, у Эндрю была правильная идея. JS может получить доступ к контенту на других серверах , используя JSONP .

Для связи с междоменными фреймами вам может понадобиться посмотреть что-то вроде Иллюминатор .

0 голосов
/ 14 февраля 2012
  1. Рисунок, как это сделать в JavaScript
  2. Инкапсулируйте это в функцию JS.
  3. Вызов функции из апплета.

Таким образом, по крайней мере, легче отлаживать взаимодействие JS и JS / апплета отдельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...