【问题标题】:Executing JS immediately, before everything, in Meteor在 Meteor 中,在一切之前立即执行 JS
【发布时间】:2013-04-23 15:55:50
【问题描述】:

我在 IE7 中使用 Meteor 应用程序时遇到很多问题。这可能是由于至少有一个 Meteorite 包(尤其是我怀疑的路由器,它特别不支持 IE7)。我收到了几个 JavaScript 错误,并且加载了一个带有空标记的空白页面。

IE7 错误仅影响 1% 的用户,但我只是讨厌某些人会访问该网站并看到一个空白页面而没有其他内容的想法,并认为这是一个糟糕的或一夜之间的项目。

我试图显示一个我写的简短页面,解释不支持 IE7 和更低版本,用户可以升级她的浏览器,或使用 Chrome Frame。如果您点击<myapp>/noie.html,您可以看到它,因为它保存在public/ 文件夹中。

但是,在应用程序的其余部分崩溃之前,我找不到任何方法来重定向到该页面,因此我的重定向代码永远不会运行(无论如何在生产中,它在我的机器上运行)。我试过把它放在lib/ 的文件中,我试过使用Meteor.startup()*,我同时做了这两个!但最终,当您在浏览器中点击 url 时,Meteor 开始行动,开始加载依赖项,然后在某个地方,一切都中断了。

如果我可以让重定向代码成为最先运行的东西之一,那么一切都会好起来的。

*this 似乎是从client_startup.js 调用的,它专门等待 DOM 准备好后再这样做。它在获取我的代码之前进行路由、渲染模板等,这对我来说太晚了。

【问题讨论】:

    标签: meteor


    【解决方案1】:

    我想我知道该怎么做了。您可以通过单击 Meteor 页面(在开发模式下提供)上的“查看源代码”来查看脚本的加载顺序。一般来说,它似乎是:

    1) Meteor 自带的包

    2) 您的包,即smart.json中列出的包

    3) 已在 .js/.coffee 文件中某处传递给 Meteor.startup() 的函数

    4) 其余的 .js/.coffee 文件,按Structuring Your App 下记录的顺序排列

    对我来说最关键的是,smart.json 文件和生成的.meteor/packages 文件的顺序似乎也决定了order the packages get loaded 的内容。

    我现在的计划是编写我自己的小智能包,它可以检测 IE7 或更低版本并进行重定向。我将把它放在packages 作为第一项,所以它会在路由器或其他任何可能导致应用程序在 IE7 上崩溃的东西之前运行。将更新说明是否可行。

    更新:成功了!我在 Atmosphere 上 published the package,就这么简单。

    【讨论】:

      【解决方案2】:

      如果你愿意改变你的 Meteor 源,你可以去这里

      https://github.com/meteor/meteor/blob/release/0.6.2/tools/server/server.js#L304

      检查request.browser,然后返回您自己的“抱歉,不支持此浏览器”HTML,而不是常规应用程序的 html(如果浏览器不受支持)。

      【讨论】:

      • 我确实想过,但 Meteor 每隔几天就会不断更新,我想我不想走那条路!
      【解决方案3】:

      相关问题在这里:Meteor Script Loading Order。 解决方案是使用Inject-initial。 (你的脚本/内容一开始绝对是,甚至在流星核心之前)

      【讨论】:

        猜你喜欢
        • 2015-12-08
        • 2017-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-15
        • 2023-04-11
        相关资源
        最近更新 更多