0

在基于 Backbone 和 requirejs 2x 的应用程序中,只有通过 grunt-contrib-require 组合应用程序时,window.onerror 才会停止捕获错误。

在 Backbone 应用程序之前和外部声明的 window.onerror 函数 id 并将错误发送到后端。

抱歉,不能发布大部分应用程序,但那些感兴趣的部分

这是我的 app/main.js 文件

require(["config"], function () {

    // config is a require.config({}); definition

    require(["app", "router"], function (app, Router) {
        app.initialize(new Router());
    });

});

关于 requirejs 任务的 Gruntfile.js 部分

    requirejs : {
        debug : {
            options : {
                mainConfigFile : "app/config.js",
                generateSourceMaps : false,
                include : [ "main" ],
                insertRequire : [ "main" ],
                out : "app.combined.js",
                optimize : "none",
                findNestedDependencies : true,
                name : "config",
                baseUrl : "app",
                wrap : false,
                preserveLicenseComments : false
            }
        }
    }

嵌入未合并的应用程序:

<script>
  window.onerror = function(msg, url, line, colno, error) {
     console.debug('onerror',arguments);
     // data will be sent to backend

     // TRACE FIRED

  }
</script>

<script src="require.js" data-main="app/main"></script>

嵌入组合应用程序:

<script>
  window.onerror = function(msg, url, line, colno, error) {
     console.debug('onerror',arguments);
     // data will be sent to backend

     // TRACE NOT FIRED
  }
</script>
<script src="app.combined.js" ></script>

欢迎任何建议!谢谢你。

4

1 回答 1

0

我找到了解决方案。

我应该在 window load 之后声明 window.onerror

    $(window).load(function() {

      window.onerror = function(msg, url, line, colno, error) {

        console.debug('onerror',arguments);

        // data will be sent to backend

        // TRACE FIRED
     };
    });

    <script src="app.combined.js" ></script>
于 2014-11-21T15:15:25.047 回答