当前位置: 首页 > 知识库问答 >
问题:

Codename One-BrowserComponent:使用back按钮返回历史记录

苍宝
2023-03-14

更新

我尝试在Android设备上使用BrowserComponent:如果我触摸设备的后退按钮,该应用程序什么也不做(下面的代码)。

更新:这是我的代码的最后一个版本

public void start() {
    if (current != null) {
        current.show();
        return;
    }
    Form hi = new Form("Community", new BorderLayout());

    // Suppress Android native indicator
    Display.getInstance().setProperty("WebLoadingHidden", "true");

    // Create the BrowserComponent
    browser = new BrowserComponent();

    // Set user-agent
    browser.setProperty("useragent", appAgent);

    // Set the start page - TO CORRECT, it's messy
    if (Display.getInstance().isSimulator()) {
        // I added this condition because opening a local html page
        // causes that the Simulator crashes
        browser.setURL(startPage_development);
        Log.p("BrowserComponet setUrl: " + startPage_development);
    } else {

        try {
            if (!Display.getInstance().isSimulator()) {
                browser.setURLHierarchy("/community.html");
            } else {
                browser.setURLHierarchy("/testing.html");
            }
            Log.p("BrowserComponet setURLHierarchy successfully");
        } catch (Exception err) {
            Log.e(err);
            browser.setURL(startPage);
            Log.p("BrowserComponet setUrl: " + startPage);
        }
    }

    // Javascript Bridge for back command
    JavascriptContext context = new JavascriptContext(browser);
    // JSObject document = (JSObject) context.get("document");
    JSObject window = context.getWindow();
    hi.setBackCommand(new Command("Back") {
        @Override
        public void actionPerformed(ActionEvent evt) {
            //window.call("goBackButton()");
            window.call("eval", new Object[]{"history.go(-1);"});
        }
    });

    // Allow browsing only inside my domains
    browser.setBrowserNavigationCallback((url) -> {
        if (url.startsWith("javascript")
                || url.startsWith(url_Root_development)
                || url.startsWith(url_Root_production)
                || url.startsWith(loginRoot)) {
            return true; // the BrowserComponent should navigate
        } else {
            Display.getInstance().callSerially(() -> {
                // it opens the url with the native platform
                Boolean can = Display.getInstance().canExecute(url);
                if (can != null && can) {
                    Display.getInstance().execute(url);
                }
            });
            return false; // the BrowserComponent shouldn't navigate
        }
    });

    hi.add(BorderLayout.CENTER, browser);
    hi.show();
}

共有1个答案

王凯旋
2023-03-14

使用setbackCommand重写后退按钮行为,并设置您可能拥有的任何业务逻辑,包括对JavaScript代码的调用。

 类似资料:
  • 我有两项活动。其中一个有碎片<从这个片段中,我可以转到另一个活动,但单击“主页”按钮,它会转到上一个活动,而不是转到上一个活动的片段。 图像

  • 问题内容: 我在尝试使用history.pushstate事件时遇到了一些问题。我进行了设置,以使页面的url是通过AJAX加载的页面的实际URL,并且可以正常工作。 我了解它应该自动创建历史记录,以加载先前加载的页面。不幸的是,帽子没有发生,当我单击后退时,URL确实会更改,但页面不会更改。你能帮助我吗?这是我的简化代码: 问题答案: 想通了,我刚刚添加: 到页面末尾

  • 读取播放历史信息 调用地址 http://api.bilibili.cn/history 返回 返回值字段 字段类型 字段说明 results int 返回的记录总数目 list object 返回数据 返回字段 “list” 子项 返回值字段 字段类型 字段说明 aid int 视频编号 typeid int 视频分类ID typename string 视频分类名称 title string

  • 历史记录 控制台维护 Elasticsearch 成功执行的最后500个请求列表。点击窗口右上角的时钟图标即可查看历史记录。这个图标会打开历史记录面板,您可以在其中查看历史请求。您也可以在这里选择一个请求,它将被添加到编辑器中当前光标所在的位置。 图 9. 历史记录面板

  • 3.3.1.1. 同步的文件历史记录 微力同步记录对文件的添加,修改、删除的操作记录,通过历史记录列表可查看时间时间及发生设备,如下: 事件时间,显示添加、修改、删除等操作发生的时间; 文件时间,显示该文件的最后修改时间; 操作类型,显示此次针对该文件所进行的操作的类型; 发生设备,显示进行此操作的设备名称; 目录,显示该文件所属同步目录; 清空历史记录,点击后可清除所有记录,此操作仅清除记录而已

  • 问题内容: 当我使用Firefox上的后退按钮访问先前访问的页面时,该页面上的 脚本将不会再次运行 。 是否有 任何修复/替代方法 可让脚本在第二次查看页面时再次执行? 请注意,我已经在Google Chrome和Internet Explorer上测试了相同的页面,它们可以正常工作。 这是我用来测试问题的文件和步骤: (导航至0.html,单击以获取1.html,后退按钮) 0.html 1.h