Browser Elm:如何呈现其中的每个Elm模块';s自己的浏览器窗口?-同一应用程序中的两个模块(主模块)

Browser Elm:如何呈现其中的每个Elm模块';s自己的浏览器窗口?-同一应用程序中的两个模块(主模块),browser,google-chrome-devtools,elm,Browser,Google Chrome Devtools,Elm,我有一个多显示器设置(带有4个显示器),我想构建一个应用程序,它将跨越其中3个显示器,就像这样:--所有显示器都处于扩展模式。 这是一个web应用程序,所以它必须位于浏览器窗口内。我不知道怎么做这种形状的镀铬窗。据我所见,浏览器窗口必须是矩形的 我无法修改应用程序的设计,我尝试了许多布局。。我不想失去功能。。。拥有这么多显示器真是太糟糕了,我不能用这么多空间做我想做的事。因此,最终的布局必须类似于您在上面看到的红色形状 我认为基于功能将我的应用程序拆分为多个较小的chrome窗口是一个好主意,

我有一个多显示器设置(带有4个显示器),我想构建一个应用程序,它将跨越其中3个显示器,就像这样:--所有显示器都处于
扩展模式

这是一个web应用程序,所以它必须位于浏览器窗口内。我不知道怎么做这种形状的镀铬窗。据我所见,浏览器窗口必须是矩形的

我无法修改应用程序的设计,我尝试了许多布局。。我不想失去功能。。。拥有这么多显示器真是太糟糕了,我不能用这么多空间做我想做的事。因此,最终的布局必须类似于您在上面看到的红色形状

我认为基于功能将我的应用程序拆分为多个较小的chrome窗口是一个好主意,而不是有一个大而肥的chrome窗口,可以容纳所有4台显示器(还可以隐藏我的终端或其他程序)

例如:

-- main module - this holds my app
   -- module 1
   -- module 2
   -- module 3
   -- module 4 .. etc
我希望他们像这样: -同一个应用程序,多个chrome窗口中的多个组件/模块

如果我把它们排列得更近,并隐藏窗口(最小化按钮、关闭按钮等),视觉上我会得到一个我想要的形状的非常好的应用程序

Chrome在同一个应用程序行为上支持此多窗口。。您可以在开发者控制台中看到它,在这里您可以在样式Css面板中修改某些内容,并实时更新页面

开发人员工具以某种方式与页面通信。-也许这不是我所需要的-但是这个想法是从另一个完全不同的窗口修改应用程序内部的内容。Chrome开发者工具基于浏览器,也可以作为单独的窗口打开

与此行为相关-我发现,它让你在同一个域的两个Chrome窗口之间传递信息-,但它是完全相同的应用程序,相同的内容不是更大应用程序的一部分。。。这就是问题所在。我想要的是两个具有不同内容的窗口,就像网页上的开发者工具一样进行交流

elm体系结构非常适合于交流更改,但我不知道如何在所有窗口中实现更新。如果我单击监视器1模块4上的某个内容,我希望在监视器2模块2中看到结果

问题:

  • 这可能吗?一点也不——不仅仅是榆树——总的来说。。可以用JavaScript完成吗

  • 有没有想法将其与elm架构相适应

  • 考虑到这是可能的,但与elm体系结构不兼容。如果我选择为每项功能/每个模块构建完全独立的elm应用程序,我如何让它们无延迟地通信?我当然可以使用服务器,但即使是60-100毫秒的延迟也不是一个选项。必须尽可能实时


  • 我在黑暗中。欢迎任何想法:)

    您可以尝试在不同选项卡之间使用共享上下文。这个API是相当新的,所以它可能有一些含义

    一个更简单的选择是

    简而言之,您可以侦听本地存储中的更改。

    尝试在多个选项卡中打开此文件(如果要签出两次,请记住刷新存储)


    我使用所有这些神奇的工具来升级您的Elm应用程序,您就一切就绪。

    是否可以选择在中构建您的应用程序?看起来有几种不同的方式可以实现窗口间的沟通。你仍然可以用Elm作为前端的Electron。嗯,谢谢@Chad Gilbert,看起来很有希望。。。我会带着一个答案回来:)@Chad Gilbert Electron绝对是做这类事情的好方法。它还可以通过Node.js访问Os API。比如关闭/最小化窗口、通知、文件系统等。你的评论让我认识了Electron Land,真是太棒了!!
    let counter = 0;
    
    if (window.localStorage.getItem('counter') === null) {
      setInterval(
        () => {
          document.body.innerText = counter;
          window.localStorage.setItem('counter', counter)
          counter++
        },
        1000
      )
    } else {
      window.addEventListener('storage', event => {
        document.body.innerText = event.newValue;
      })
    }