0

swt のブラウザ ウィジェットを含むプログラムを作成しました。ここで、Google に移動して、たとえば「Pictures」という文字列を検索したいとします。これは私のコードですが、動作しません:

browser.addProgressListener(new ProgressAdapter() {

    boolean firstCompleted = false;

    @Override
    public void completed(ProgressEvent evt) {
        if (!firstCompleted) {
            String search = "Pictures";
            // this row doesn't work... - not yet ;)
            int n = (int) browser.evaluate("return str.search(\"" + search + "\"));");
            if (n == -1) {
                // string not found
            } else if(n >= 1) {
                // string found
            }

            firstCompleted = true;
        }
    }
});

JavaScript は文字列が利用可能かどうかを確認しn、str.search()-Operation の結果を含む整数を返す必要があります。n == -1そのような文字列がない場合、n == 1その文字列が Web サイトで見つかった場合。

4

1 に答える 1

1

以下は、JavaScript から Java に値を返し、それをコマンド ラインに出力する非常に単純な例です。

public static void main(String[] args)
{
    Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setText("StackOverflow");
    shell.setLayout(new FillLayout());

    final Browser browser = new Browser(shell, SWT.NONE);
    browser.setText("......baz");

    Button b = new Button(shell, SWT.PUSH);
    b.setText("Do something");
    b.addListener(SWT.Selection, new Listener()
    {
        public void handleEvent(Event e)
        {
            String baz = "baz";
            boolean result = (boolean) browser.evaluate("return window.find('" + baz + "');");
            System.out.println(result);
        }
    });

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

私はあなたが使用したものとは異なる JS 関数を使用しており、JS コードに閉じ括弧が追加されていることに注意してください。

ここに優れたチュートリアルがあります。

于 2013-07-20T20:41:53.867 に答える