如何在 Eclipse 控制台中显示 javascript console.log?

How to display javascript console.log in eclipse console?

标题说明了一切。我想知道我是否可以在 Eclipse 控制台而不是 Web 浏览器的开发控制台中显示 javascript console.log

刚刚找到一个关于这个的article

这就是它的工作原理(针对 Window 7)。

  1. Node.js
  2. 安装 Node.js javascript 引擎
  3. 在菜单中打开 Eclipse

    运行->外部工具->外部工具配置

  4. 在程序类别下创建新的启动配置。

  5. 设置

    位置:C:\WINDOWS\system32\cmd.exe

    工作目录:C:\WINDOWS\system32

    参数:/c "node ${resource_loc}"

  6. 现在创建新环境变量 'node' 引用 node.exe 文件(无论你安装在哪里)

全部完成。

重定向java脚本console.logs,在Java控制台

这是我在 Java 中获取 java 脚本控制台消息的解决方案(使用 SWT 浏览器)

  1. 创建 shell SWT 和 SWT 浏览器 see: Shell + Browser
  2. 创建自定义函数 SWT see: call Java from JavaScript
  3. 在 java 脚本 see: mdn event error
  4. 中添加错误事件侦听器
  5. 覆盖 java 脚本中的控制台对象并调用自定义 java 函数 (2.)

这是我的示例片段:

import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTError;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.BrowserFunction;
import org.eclipse.swt.browser.LocationAdapter;
import org.eclipse.swt.browser.LocationEvent;
import org.eclipse.swt.browser.ProgressListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class Snippet307d3 {

    public static final Shell createShell() {
        final var display = new Display();
        final var shell = new Shell(display);
        shell.setText("Snippet DEBUG");
        shell.setLayout(new FillLayout());
        shell.setBounds(10, 10, 300, 200);
        return shell;
    }

    public static final Browser createBrowser(Shell shell) {
        try {
            return new Browser(shell, SWT.NONE);
        } catch (final SWTError e) {
            System.out.println("Could not instantiate Browser: " + e.getMessage());
            shell.getDisplay().dispose();
            System.exit(-1);
            return null;
        }

    }

    public static final void runShell(Shell shell) {
        shell.open();
        final var display = shell.getDisplay();

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

        display.dispose();
    }

    public static void main(String[] args) {

        // -> Create shell
        final var shell = createShell();

        // -> Create browser
        final var browser = createBrowser(shell);
        browser.setJavascriptEnabled(true);

        // -> set HTML or use setUrl
        browser.setText(createHTML());
        // browser.setUrl(URL_DOCUMENT_HTML_TEST);

        // -> Create custom function
        final BrowserFunction function = new CustomFunction(browser, "theJavaFunctionDebugInEclipse");

        // -> Register function for cleanup
        browser.addProgressListener(ProgressListener.completedAdapter(event -> {
            browser.addLocationListener(new LocationAdapter() {
                @Override
                public void changed(LocationEvent event) {
                    browser.removeLocationListener(this);
                    System.out.println("left java function-aware page, so disposed CustomFunction");
                    function.dispose();
                }
            });
        }));

        // -> 6) Start shell
        runShell(shell);
    }

    private static class CustomFunction extends BrowserFunction {
        public CustomFunction(Browser browser, String name) {
            super(browser, name);
        }

        @Override
        public Object function(Object[] arguments) {
            for (final Object v : arguments)
                if (v != null)
                    System.out.println(v.toString());

            return new Object();
        }
    }

    private static String createHTML() {
        return """
                <!DOCTYPE>
                <html lang='en'>
                <head>
                <title>DEBUG SWT</title>
                <script>
                    const console = {
                        log : function(args) {
                            try {
                                theJavaFunctionDebugInEclipse('redirect > ' + args);
                            } catch (_e) {
                                return;
                            }
                        },

                        error : function(args) {
                            this.log(args);
                        },

                        exception : function(args) {
                            this.log(args);
                        },

                        debug : function(args) {
                            this.log(args);
                        },

                        trace : function(args) {
                            this.log(args);
                        },

                        info : function(args) {
                            this.log(args);
                        }
                    };

                    window.addEventListener('error', function(e) {
                        console.log(e.type + ' : ' + e.message);
                        console.log(e);
                    });
                </script>
                </head>
                <body>

                    <input id=button type='button' value='Push to Invoke Java'
                        onclick='function1();'>

                    <p>
                        <a href='http://www.eclipse.org'>go to eclipse.org</a>
                    </p>

                    <script>

                        // bad char sequence .. send error
                        eeeee

                        function function1() {
                            let result;

                            try {
                                // Call bad function java .. send log
                                result = badFunctionJava(12, false, null, [ 3.6,
                                        [ 'swt', true ] ], 'eclipse');
                            } catch (e) {
                                console.log('a error occurred: ' + e.message);
                                return;
                            }
                        }
                    </script>
                </body>
                </html>
                """;
    }

}

进一步 ,这些将是 外部工具配置 在 Linux 上的命令:

  • 位置:/home/<user>/.nvm/versions/node/<version>/bin/node(或安装节点的任何地方)
  • 工作目录:/home/<user>
  • 参数:${container_loc}/${resource_name}