Как поговорить с функцией Javascript от SWT - PullRequest
8 голосов
/ 17 октября 2011

Мой HTML-файл имеет функцию javascript xxx_return (), которая будет возвращать строковое значение. Есть ли способ, как я могу взять это значение из слоя Java?.

Я использую оболочку SWT для отображения этого HTML. Имеет ли SWT какую-либо функцию для получения значений, возвращаемых функцией скрипта?

редактирование:

Мой код выглядит примерно так: пакет test.html.simulation;

import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class BrowserExample{
public static void main(String[] args) 
{
  Display display = new Display();
  final Shell shell = new Shell(display);
  String html="";
  Object ob=null;
    shell.setText("Browser Example");
    shell.setSize(500, 350);

        final Browser browser = new Browser(shell, SWT.NONE);
        browser.setBounds(5, 75, 600, 400);

        browser.setUrl("http://localhost/test/tryxml.html");

        shell.open();
        //System.out.println(browser.getUrl());
        //try
        {
        html=(String)browser.evaluate("returnHTML();");
        }/*catch(SWTException e)
        {
            System.out.println(e.getMessage());

        }*/
        System.out.println(html);

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
            }

        display.dispose();


}

Этот код дает мне исключение SWT, как ожидаемый объект:

Exception in thread "main" org.eclipse.swt.SWTException: Object expected
at org.eclipse.swt.browser.WebBrowser$EvaluateFunction.function(Unknown Source)
at org.eclipse.swt.browser.WebSite.Invoke(Unknown Source)
at org.eclipse.swt.browser.WebSite$7.method6(Unknown Source)
at org.eclipse.swt.internal.ole.win32.COMObject.callback6(Unknown Source)
at org.eclipse.swt.internal.ole.win32.COM.VtblCall(Native Method)
at org.eclipse.swt.internal.ole.win32.IDispatch.Invoke(Unknown Source)
at org.eclipse.swt.ole.win32.OleAutomation.invoke(Unknown Source)
at org.eclipse.swt.ole.win32.OleAutomation.invoke(Unknown Source)
at org.eclipse.swt.browser.IE.execute(Unknown Source)
at org.eclipse.swt.browser.WebBrowser.evaluate(Unknown Source)
at org.eclipse.swt.browser.Browser.evaluate(Unknown Source)
at test.html.simulation.BrowserExample.main(BrowserExample.java:29)

В сценарии java я написал функцию в теге script, например:

<script>
function returnHTML()
  {
   var str=document.body.innerHTML;
   //alert(str);
   return str;
  }
</script>

Может кто-нибудь найти ошибку в этом? Я не понимаю, где он попадает в ошибку.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 18 октября 2011

Я нашел это, исключение произошло, так как Browser.evaluate () вызывался до того, как страница была загружена в оболочку.Я добавил ProgressListener, чтобы узнать о завершении, и попытался назвать его работающим.

browser.addProgressListener(new ProgressListener() {
              public void changed(ProgressEvent event)
              {

              }
              public void completed(ProgressEvent event)
              {String htm;
                htm=(String)browser.evaluate("return returnHTML()"); 
                System.out.println(htm);
              }
            });

Спасибо всем

4 голосов
/ 17 октября 2011

Использовать объект SWT Browser.Тогда вы можете просто использовать String result = (String)Browser.evaluate("xxx_return();").

1 голос
/ 06 августа 2015

В дополнение к вышеуказанным решениям добавьте «return» перед выражением. Также в зависимости от того, что вы оцениваете, завершенное событие может быть проигнорировано. Следующее выражение просто работает.

browser.evaluate("return 4 + 5;")

Конечно, если вы оцениваете javascript со страницы, загруженной в браузер, то оценка должна быть вызвана после завершенного события, иначе javascript, возможно, не был загружен.

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