簡體   English   中英

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

[英]How to display javascript console.log in eclipse console?

標題說明了一切。 我想知道我是否可以在 Eclipse 控制台而不是 Web 瀏覽器的開發控制台中顯示 javascript console.log

剛剛找到一篇關於這個的文章。

這就是它的工作原理(對於 Window 7)。

  1. Node.js上安裝 Node.js javascript 引擎
  2. 在菜單中打開 Eclipse

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

  3. 在程序類別下創建新的啟動配置。

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

    工作目錄:C:\WINDOWS\system32

    參數:/c "node ${resource_loc}"

  5. 現在創建新的環境變量“節點”指的是 node.exe 文件(無論你安裝在哪里)

全部完成。

在 Java 控制台中重定向 javascript console.logs

這是我在 Java 中獲取 javascript 控制台消息的解決方案(使用 SWT 瀏覽器)

  1. 創建 shell SWT 和 SWT 瀏覽器參見:Shell + Browser
  2. 創建自定義函數 SWT 請參閱:從 JavaScript 調用 Java
  3. 在 javascript 中添加錯誤事件的偵聽器, 請參閱:mdn 事件錯誤
  4. 在 javascript 中覆蓋控制台對象並調用自定義 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>
                """;
    }

}

除了@ringord's answer here ,這些將是您在 Linux 上的外部工具配置的命令:

  • 位置:/home/<user>/. /home/<user>/.nvm/versions/node/<version>/bin/node /versions/node/<version>/bin/node(或安裝節點的任何位置)
  • 工作目錄: /home/<user>
  • 參數: ${container_loc}/${resource_name}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM