JX浏览器如何设置脚本超时

How to set script timeout for JX browser

我们正在使用 jxbrowser 版本 6.21(撰写本文时为最新版本)。

如果脚本陷入无限循环,jxbrowser 就会冻结并保持无响应。我等了2分多钟

有什么办法可以顺利处理吗?

现代浏览器检测到这一点并向用户显示一个覆盖图以停止脚本。

SSCCE: html-包含此内容的文件:

<html>
    <body>
        <script>
            function badLoop() {
                var nextTime = new Date().getTime();
                while (true) {
                    var now = new Date().getTime();
                    if (now > nextTime) {
                        console.log('badLoop() running: ' + now);
                        nextTime = now + 500;
                    }
                }
            }
        </script>
        <input type="button" value="startLoop" onClick="badLoop()" />
    </body>
</html>

使用其他浏览器测试运行:

jxbrowser 可以吗?是全自动还是用户确认?

下面是一个示例,演示如何在 JxBrowser 中拦截相应的 onRenderUnresponsive 事件并检测网页无响应:

public class BrowserSample {

    public static void main(String[] args) {
        Browser browser = new Browser();
        BrowserView view = new BrowserView(browser);

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(view, BorderLayout.CENTER);
        frame.setSize(700, 500);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        browser.addRenderListener(new RenderAdapter() {
            @Override
            public void onRenderUnresponsive(RenderEvent event) {
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        JOptionPane.showMessageDialog(view, "The web page is unresponsive.");
                    }
                });
            }
        });

        browser.loadHTML("<html>\n"
                + "    <body>\n"
                + "        <script>\n"
                + "            function badLoop() {\n"
                + "                var nextTime = new Date().getTime();\n"
                + "                while (true) {\n"
                + "                    var now = new Date().getTime();\n"
                + "                    if (now > nextTime) {\n"
                + "                        console.log('badLoop() running: ' + now);\n"
                + "                        nextTime = now + 500;\n"
                + "                    }\n"
                + "                }\n"
                + "            }\n"
                + "        </script>\n"
                + "        <input type=\"button\" value=\"startLoop\" onClick=\"badLoop()\" />\n"
                + "    </body>\n"
                + "</html>");
    }
}

https://jxbrowser.support.teamdev.com/support/solutions/articles/9000091687-detecting-unresponsive-web-page