延迟回调中的异常会阻止在FireFox上的iframe中呈现铁路由器

时间:2015-07-02 19:05:12

标签: javascript iframe meteor iron-router

我正在使用Meteor应用程序,该应用程序主要希望存在于<iframe>内。

重现的步骤

  1. meteor create iframe-test
  2. cd iframe-test
  3. meteor add iron:router
  4. meteor
  5. 使用jsbin.com或其他一些在iframe中加载http://localhost:3000的工具创建测试页。
  6. 在Firefox中加载页面并查看控制台。您会看到类似的内容(请注意,您可能需要使用Ctrl / Cmd + Shift + R进行硬刷新。)
  7. 我在下面添加了一个示例jsbin和git repo的链接。

    
    18:26:56.356 Exception in defer callback: onLocationChange@http://localhost:3000/packages/iron_router.js?7b16fe70bccff9182aca02afb2ccd7708ac57c64:2227:55
    Tracker.Computation.prototype._compute@http://localhost:3000/packages/tracker.js?6d0890939291d9780f7e2607ee3af3e7f98a3d9c:323:41
    Tracker.Computation@http://localhost:3000/packages/tracker.js?6d0890939291d9780f7e2607ee3af3e7f98a3d9c:207:41
    Tracker.autorun@http://localhost:3000/packages/tracker.js?6d0890939291d9780f7e2607ee3af3e7f98a3d9c:564:48
    Router.prototype.start@http://localhost:3000/packages/iron_router.js?7b16fe70bccff9182aca02afb2ccd7708ac57c64:2223:68
    Router/ eval:23:19959
    1 meteor.js:944:47
    
    • 异常会阻止铁路由器呈现任何模板(页面显示为空白)。
    • 仅在首次加载时发生异常 - 如果使用软刷新(Ctrl / Cmd + R)刷新页面,则模板会正确呈现。
    • 使用硬刷新(Command / Ctrl + Shift + R)可以可靠地重现 的问题
    • 仅在FireFox(运行40.0a2)上发生异常 - 在其他浏览器中运行良好。
    • 似乎来自Meteor.defer第44行iron-router/lib/router.js来电(在铁路由器存储库中)

    Repro repos

    关于可能发生的事情的任何想法?

    感谢您的帮助!

    作为参考,我已将此报告为潜在问题here,尽管我并不一定确信问题在于铁路由器本身。我怀疑这与FireFox本身的HTML5 History API实现有某种关系,由于某种原因,它在<iframe>中的行为有所不同。

    解决方法

    通过在设置其位置之前动态创建<iframe>,似乎可以解决此问题:

    var body = document.getElementsByTagName('body')[0];
    var iframe = document.createElement('iframe');
    body.appendChild(iframe);
    iframe.src = 'http://localhost:3000';
    

    仍然认为这与FireFox如何在<iframe>中设置HTML5历史记录有关。如果您在两个不同的iframe中查询history.state,则可获得以下结果:

    动态创建<iframe>

    history.state // Object { initial: true }
    

    静态创建<iframe>

    history.state // null
    

0 个答案:

没有答案