【问题标题】:How to change URL at runtime如何在运行时更改 URL
【发布时间】:2020-01-29 09:37:47
【问题描述】:

我们正在尝试使用 Cobalt (20.stable) 浏览器作为我们 Web SPA 应用程序的浏览器。 我的要求是能够在运行时更改 URL,我能够在代码中找到: 是:

  starboard::shared::starboard::Application::Link(const char* link_data)

最终发送:

 kSbEventTypeLink

不幸的是,这不起作用,因为代码忽略了调用;处理达到目的:

  // TODO: Remove this when terminal application states are properly handled.
  if (deep_link_event->IsH5vccLink()) {
    browser_module_->Navigate(GURL(deep_link_event->link()));
  }

就我而言,我正在尝试将 URL 更改为 https://www.example.com。 应该有一种方法可以做到这一点,因为在导航时我们总是可以有一个链接导致浏览器转到某个 URL?

【问题讨论】:

    标签: cobalt


    【解决方案1】:

    移植层不应该直接控制导航。相反,您的 Starboard 实现可能会发送一个深度链接事件,该事件可能会被执行导航的 Web 应用程序拦截。有关 Web API,请参阅 h5vcc_runtime.idl

    也就是说,如果您正在构建 SPA,为什么还需要更改 URL? Web 应用的初始 URL 由--url 命令行开关控制。

    【讨论】:

    • 谢谢! > Starboard 实施可能会发送一个深度链接事件 |这就是我所做的,但在我的情况下,我正在设置 URL:example.com 这结束了我上面提到的代码,检查 IsH5vccLink() 并调用 Navigate()。对于google.com,IsH5vccLink() 为假,导航未完成(Deeplink 事件被忽略)。我应该用example.com 制作H5vccLink 吗?请指教 > 为什么你甚至需要更改 URL?|出于开发目的,我们需要切换到其他 url(其他应用程序),而不必杀死钴浏览器并使用新 URL 启动一个新浏览器。
    【解决方案2】:

    当您说运行时,您是否希望在应用首次启动时更改初始 URL?如果是这样,您可以只使用--url 参数。

    因此您可以执行以下操作: cobalt --url="https://www.example.com"

    【讨论】:

    • 我想在应用程序启动后这样做。假设我从:cobalt --url="app1.com"开始。然后稍后在我的 App1 中,我不会切换到另一个 app2.com。 (只要点击了带有 href="app2.com" 的链接)。由于 IsH5vccLink() 测试失败,使用 app2.com 发布 deeplinkEvent 将被忽略。 (强制 Navigate() 调用没有任何效果)。
    【解决方案3】:

    我做了一个补丁来允许更改 URL。 我只需要调用starboard::shared::starboard::Application::Link("https://www.example.com")。 在此调用中发布了 DeepLinkEvent。 补丁:https://gofile.io/?c=9GvNHX

    【讨论】:

      【解决方案4】:

      Cobalt 不会为您导航。 JavaScript 使用它在h5vcc.runtime.onDeepLink 上设置的函数接收深层链接,然后用它做任何它想做的事情。作为 SPA,它将解析 URL 并以自己的内部数据格式(例如protocol buffers、JSON 等)从其服务器加载新内容,并使用它来更新自己的 DOM 以显示新内容。

      导航不是 SPA 的重点,因为这使它不是一个单页应用程序。但是,可能存在某些情况,例如加载程序应用程序需要做出一些初始决定,然后加载实际的 SPA。该加载程序应用必须具有适当的 CSP 规则,然后将 window.location 设置为要导航到的页面的 URL。

      注意:您在 Application::OnDeepLinkEvent() 中找到的代码是以前支持 H5vccURLHandler 的残余代码,该代码在 Cobalt 20 中已被删除。它并不意味着导航到任意深度链接。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-04
        • 2020-06-26
        • 1970-01-01
        • 1970-01-01
        • 2022-11-10
        • 1970-01-01
        相关资源
        最近更新 更多