【问题标题】:How can I encapsulate svelte app within iframe of svelte app?如何将 svelte app 封装在 svelte app 的 iframe 中?
【发布时间】:2019-05-29 06:19:15
【问题描述】:

将在线模拟针对移动设备的纤巧应用(其中呈现实际应用的移动绘图)。由于媒体查询(由于应用程序是整个页面而不仅仅是移动绘图内容,因此不起作用),我最好的解决方案是应用程序应该在 iframe 内。

有没有办法做到这一点,而无需实际编写另一个封装前者的苗条应用程序?因为它将所有东西捆绑在一起。我可以处理工兵设置来控制它,但对我来说似乎有点乱。正如扭曲 CSS 以模拟媒体查询一样,在发布到生产目标时全部切换回来。

然后我将运行两个不同的 sapper CLI 开发服务器、package.json、git repos 等。还必须考虑部署,关于两个 public/dist 文件夹及其路径/路由。

还有其他想法吗?

编辑:更清楚地说,我基本上有 4 个选项:

1 - 在没有媒体查询和 vh/vw 单元的情况下调整 CSS(很难,有时可能是不可能的)

2 - 模拟器作为组件(但 iframe src 指向哪里?)

3 - 设置两个汇总输出,也许 app 是一个可水合的组件。 iframe 将指向输出 2(如何协调?index1 与 index2?同一个公用文件夹,具有应用程序的 2 个渲染部分)

4 - 两个独立的应用程序,整个事情(如何部署?两个网络服务器可以做,但理想情况下它应该成为一个最终应用程序)

希望更清楚

【问题讨论】:

    标签: iframe media-queries svelte


    【解决方案1】:

    您可以只选择目标为 iframe 正文。更多关于如何创建苗条组件的信息https://svelte.dev/docs#Client-side_component_API

    import App from './App.svelte';
    
    const iframe = document.createElement("iframe");
    iframe.onload = (ev) => {
        const app = new App({
            target: iframe.contentWindow.document.body,
            props: {
                name: 'world'
            }
        });
    };
    document.body.append(iframe);
    

    【讨论】:

      【解决方案2】:

      如果我没听错的话。

      1. 打包成一个可滚动的 div 怎么样?
      2. 您的苗条应用程序被打包到一个 bundle.js 中。将 index.html 重命名为 sth.html,然后在新的 index.html 中 iframe src=sth.html

      【讨论】:

      • 是的,对于 1,问题是媒体查询(在整个页面时适用于内部应用程序,但在 div 内时失败),在 2 中我需要 2 个 index.html,一个用于模拟器另一个用于应用程序本身。我可以重命名,但如何配置所有内容?
      • 在您的情况下,可能会使用 iframe 打开本地 html,以正确的 index.html 为目标,这将是解决方案。但这已经看起来有点古怪了。所以我建议重构css`s
      猜你喜欢
      • 2019-12-09
      • 2019-11-21
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 2019-11-13
      相关资源
      最近更新 更多